我非常喜欢Eric Barnard的淘汰验证lib与observable集成,允许分组,并提供自定义验证器可插拔性(包括即时验证器).有几个地方可以提供更多的UX灵活性/友好性,但总的来说,它有相当充分的文档...... 除了imo,它涉及到异步验证器.
今天我在这个问题上进行了搜索和着陆之前,我已经与它搏斗了几个小时.我想我和原作者有同样的问题/问题,但同意不清楚duxa究竟要求的是什么.我想更多地关注这个问题,所以我也在这里问.
function MyViewModel() {
var self = this;
self.nestedModel1.prop1 = ko.observable().extend({
required: { message: 'Model1 Prop1 is required.' },
maxLength: {
params: 140,
message: '{0} characters max please.'
}
});
self.nestedModel2.prop2 = ko.observable().extend({
required: { message: 'Model2 Prop2 is required' },
validation: {
async: true,
validator: function(val, opts, callback) {
$.ajax({ // BREAKPOINT #1
url: '/validate-remote',
type: 'POST',
data: { ...some data... }
})
.success(function(response) {
if (response == true) …Run Code Online (Sandbox Code Playgroud) javascript asynchronous knockout-2.0 knockout.js knockout-validation
在EF 4.1+中,这两行代码之间有区别吗?
dbContext.SomeEntitySet.Add(entityInstance);
dbContext.Entry(entityInstance).State = EntityState.Added;
Run Code Online (Sandbox Code Playgroud)
或者他们做同样的事情?我想知道是否可能会影响子集合/导航属性与另一个不同.
仍然不到72小时即将加速角度.使用淘汰赛一段时间后,我不得不说这很有意思.我现在的问题与ng-class有关.
说我有以下内容:
<div class="myClass" ng-class="{myClass: false}">
Run Code Online (Sandbox Code Playgroud)
当angular bootstrap时,它不会删除之前渲染的myClass属性.我原以为它,因为这就是ko的css绑定所做的.似乎角度只会删除类,如果有角度是那个把它放在那里.
那么,有一个共同的解决方法吗?除了创建自定义指令?
...猜我是第一个问这个问题的人?
假设您有以下路由,每个路由在不同的控制器上声明:
[HttpGet, Route("sign-up/register", Order = 1)]
[HttpGet, Route("sign-up/{ticket}", Order = 2)]
Run Code Online (Sandbox Code Playgroud)
...你可以在MVC 5.0中使用除Order参数之外的相同代码执行此操作.但升级到MVC 5.1后,您会在问题标题中收到异常消息:
找到了与URL匹配的多种控制器类型.如果多个控制器上的属性路由与请求的URL匹配,则会发生这种情
那么新RouteAttribute.Order属性只是控制器级别?我知道在AttributeRouting.NET中你也可以这样做SitePrecedence.当所有操作都在同一个控制器中时,是否有获得上述路由的唯一方法?
更新
对不起,我应该提到这些路由是在MVC控制器上,而不是WebAPI.我不确定这会如何影响ApiControllers.
asp.net-mvc-controller attributerouting asp.net-mvc-5 asp.net-mvc-5.1
我们有很多验证方法需要访问存储库/数据库才能完成工作.到目前为止,我们一直在使用服务定位器模式(尽管很少)在自定义ValidationAttributes中完成此操作:
public override bool IsValid(object value)
{
// use custom service locator in our app's infrastructure
var repos = DependencyInjector.Current.GetService<IXyzRepository>();
...
}
Run Code Online (Sandbox Code Playgroud)
我知道这是:(作为一个反模式,我们想使用更正确的方法.我们使用统一,我读了这篇文章,说使用建立方法.但是接受的答案中的链接说文档已经过时(退役内容).
解决方案不需要使用验证属性,我想它可以使用IValidatableObject,但问题仍然存在:如何将依赖项注入模型.我们需要一个自定义模型绑定器吗?
另一种解决方案是在控制器中执行验证,其中依赖注入很容易.对我来说,这感觉很混乱.我希望模型在到达action方法时得到验证.
此外,我们有时使用[RemoteAttribute]在客户端上执行某些验证.目前,这些方法通过使用静态Validator.TryValidateObject方法构造视图模型并将验证委托给模型.
如何在不使用SL反模式的情况下完成需要注入依赖项才能完成工作的验证?
我们有一些文件存储在sql数据库中.在ASP.NET MVC3表单上,我们显示2个链接:
查看此文件| 下载此文件
这些链接转到这些相应的操作方法.下载按预期工作 - 单击链接会强制在浏览器中保存对话框.但是,显示会导致重复的内容处置标头发送到浏览器,导致Chrome出错,Firefox中出现空白页面.
[ActionName("display-file")]
public virtual ActionResult DisplayFile (Guid fileId, string fileName)
{
var file = _repos.GetFileInfo(fileId);
if (file != null)
{
Response.AddHeader("Content-Disposition",
string.Format("inline; filename={0}", file.Name));
return File(file.Content, file.MimeType, file.Name);
}
}
[ActionName("download-file")]
public virtual ActionResult DownloadFile (Guid fileId, string fileName)
{
var file = _repos.GetFileInfo(fileId);
if (file != null)
{
return File(file.Content, file.MimeType, file.Name);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是发送到浏览器以显示操作的2个标头:
Content-Disposition: inline; filename=name-of-my-file.pdf
Content-Disposition: attachment; filename="name-of-my-file.pdf"
Run Code Online (Sandbox Code Playgroud)
我尝试更改自定义内容处置标头以用双引号包装文件名,但它仍然向浏览器发送了2个标头.我还尝试在添加自定义标头之前删除Content-Disposition标头,但是在返回FileContentResult之后会出现附件标头.
这段代码以前有用.我昨天进行了测试,发现它已不再适用于Chrome或Firefox.这可能是由于浏览器的更新.IE8和Safari仍然正确打开文件.
更新
再次感谢达林,你是对的.我们实际使用这种方法是因为您回答了另一个问题.
关于如何最终解决这个问题的更多信息,我们有一个显示文件链接的自定义路由:
context.MapRoute(null,
"path/to/display-file-attachment/{fileId}/{fileName}",
new …Run Code Online (Sandbox Code Playgroud) WebAPI的一个常见用例是使用MVC控制器呈现shell视图,其中包含javascript然后命中您的API以访问数据.
但是,假设您有一些昂贵的API操作,并且您不希望人们远程访问这些端点 - 您只希望应用程序提供的MVC视图访问它们.你怎么能保护他们?
在这种情况下Request.IsLocal不起作用,因为javascript是从他们的机器上的客户端浏览器调用它.即使它确实有效,你需要挖掘才能找到真正HttpContext的东西才能找到这个属性 - 而且这个解决方案在自托管的WebAPI中不起作用.
对于需要有效的API端点IPrincipal,您可以使用该[Authorize]属性保护它们.但是,您希望应用能够为匿名用户访问的API端点呢?
我已经尝试了一个解决方案并将其单独发布作为答案,因为我不确定它是否是最好的(甚至是好的)方法.
我们知道EF根据我们添加到.edmx文件的表生成类.哪个不会有[DisplayName] DataAnnotations.
如何在不修改生成的类的情况下添加此[DisplayName]?因为生成的类可以被覆盖如果我修改.edmx文件(重新添加修改的表),如果数据库更改.所以我不想修改生成类本身.
public partial class Committee
{
public string Committee_Description { get; set; }
public byte[] Committee_Id { get; set; }
public string Rn_Descriptor { get; set; }
public Nullable<System.DateTime> Rn_Create_Date { get; set; }
......
.....
Run Code Online (Sandbox Code Playgroud)
<tr>
<th>
@Html.DisplayNameFor(model => model.Item2.GetEnumerator().Current.Committee_Name)
</th>
Run Code Online (Sandbox Code Playgroud) asp.net-mvc entity-framework ef-database-first asp.net-mvc-4
据我所知,web.config文件中的任何部分都可以使用aspnet_regiis.exe进行加密和解密.
如果aspnet_regiis可用于解密web.config文件,那么加密它的重点是什么?是否只是将密码和敏感信息保存为纯文本?如果有文件和exe的任何人都可以解密它,它真的保护敏感的配置信息吗?
UPDATE
感谢所有关于机器钥匙的人.我问这个问题的原因是因为我们在codeplex.com上有一个开源项目.但是,我们还将此项目部署到Windows Azure.我试图找到一种最好的方法来保持敏感密码不受源代码控制,但是当我部署到Azure时,将它们作为我的项目的一部分进行访问.
目前,我正在使用Web配置转换来存储Azure连接字符串(以及system.net的Gmail密码).我创建了一个Web.PublishToAzure.config转换文件,并将该文件保留在源代码管理之外.我也发现这篇文章可能是更好的选择.再次感谢.
我是一个机器人初学者,试图学习,这是我的第一个问题,所以请原谅我,如果问题太简单,请告诉我,如果我正在使用论坛不正确.
我有一个FragmentActivity使用包含viewpager的布局; 该活动创建一个MyFragmentPagerAdapter实例,它创建了几个MyFragment实例.所有都是support.v4版本.
我试图找到一种方法来传递一个整数值(表示用户之前做出的选择,实际上可能是一个可绘制的id)到片段.我正在使用一个意图将它传递给这个活动,我知道我可以使用bundle将FragmentPagerAdapter中的值传递给片段,但我找不到从活动到FragmentPagerAdapter的方法.我尝试了几种方法,包括更改构造函数但无法使其工作.
我错过了一些简单的事吗?做这个的最好方式是什么?
public class SecondActivity extends FragmentActivity {
private MyIntegerAdapter1 mAdapter1;
private ViewPager mPager1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
mAdapter1 = new MyIntegerAdapter1(getSupportFragmentManager());
mPager1 = (ViewPager) findViewById(R.id.pager1);
mPager1.setAdapter(mAdapter1);
Run Code Online (Sandbox Code Playgroud)
public class MyIntegerAdapter1 extends FragmentPagerAdapter {
public MyIntegerAdapter1(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
Fragment f1 = new IntegerFragment();
Bundle args1 = new Bundle();
args1.putInt("param", R.drawable.image1);
args1.putInt("number", 1);
f1.setArguments(args1);
return f1;
etc
Run Code Online (Sandbox Code Playgroud)
public class …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager fragmentpageradapter
asp.net-mvc ×2
android ×1
angularjs ×1
asp.net ×1
asynchronous ×1
c# ×1
dbcontext ×1
download ×1
encryption ×1
javascript ×1
knockout-2.0 ×1
knockout.js ×1
passwords ×1
security ×1
validation ×1
web-config ×1