ASP.NET MVC RemoteAttribute不会触发操作方法在控制器
1.项目规范ASP.NET MVC RemoteAttribute不会触发操作方法在控制器
任务:检查用户输入唯一的字典名称。
模型(在我的项目的所有实体都在单独的类):
public class Dictionary
{
[Required]
[Index("IX_Dictionary_Name_UK", IsUnique = true)]
[MaxLength(100)]
[Display(Name="Name")]
[Remote("DictionaryNameExists", "Administrator", ErrorMessage = "Dictionary name already exists in the database!")]
public string Name { get; set; }
}
控制器:
[Authorize(Roles="Administrator")]
public class AdministratorController : BaseController
{
public AdministratorController(IDictionaryRepository dictionaryRepository)
{
this.dictionaryRepository = dictionaryRepository;
this.dictionaryModel = new DictionaryModel();
}
[AllowAnonymous]
public JsonResult DictionaryNameExists(string Name)
{
return Json(dictionaryRepository.DictionaryNameExists(Name), JsonRequestBehavior.AllowGet);
}
}
查看:
@using (Html.BeginForm("AddEditDictionary", "Administrator")){
<div id="dictionaryContainer" class="modal-body">
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.Dictionary.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Dictionary.Name)
@Html.ValidationMessageFor(model => model.Dictionary.Name)
</div>
</fieldset>
</div>
<div class="modal-footer">
<button id="btnSaveChanges" type="submit" name="command" value="Save" class="btn btn-primary">Save dictionary</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>}
上视图是一个PartialView我” m包括到由ajax查询引导模式中,如下所示:
2.问题
DictionaryNameExists方法没有触发。我在那里设置了断点,它不会'打'它。其次,即使当我输入现有名称时,ModelState.IsValid也是如此。 ModelState.IsValid适用于MaxLengthAttribute和RequiredAttribute。
3 Whathaveyoutried.com
- 我已经启用了在web.config中(ClientValidationEnabled和UnobtrusiveJavaScriptEnabled)设置
-
如下我添加的属性我控制器:
[OutputCache(Location = OutputCacheLocation.None,NoStore = true)]
我已经添加了HttpG et属性到方法和RemoteAttribute也是如此。
- 我已经包含JavaScript库
- 服务器正确生成我的标签:
...数据-VAL-远程= “!字典名称已经存在于数据库”数据-VAL-远程additionalfields = “*名” 数据-VAL-远程URL = “/管理/ DictionaryNameExists” ......
- 作为Darin回答我加了他的代码,我的 “MakeGetRequestFunction”
- 最后我清除了浏览器(Chrome)缓存。
- 我的视图模型是包含我的实体类的类,所以我的想法是,以我的绑定属性,但它也没有为我工作
4.什么呢?
我可以自定义属性,但我在单独的库中有模型,所以我不能在那里注入我的存储库以检查唯一性。出于同样的原因,我不能使用如FluentValidation这样的库。我相信我的行动没有解雇的原因很简单。我在寻求你的帮助。
因为您的内容在验证呼叫后加载。您需要在加载部分视图后调用验证和解析。
$.get(url, function (data) {
$("#containerId").html(data);
$("#modalId").modal('show');
var form = $('form');
form.removeData('validator');
form.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse(form);
});
谢谢它解决了我的问题。 所以这是我的错误。我确实从验证程序中删除了数据,但是我在$ .get(url,function(data){})后执行了该操作。不在这个建筑里面。 –
您已经使用Authorize属性装饰了Controller并且DictionaryNameExists也位于此控制器中,所以这不应该成为问题吗? – Mairaj
这是我第一次想到的,所以我在我的方法上使用了[AllowAnonymous]。它没有帮助。但是谢谢你的时间。 –