[英]ASP.NET MVC RemoteAttribute does not trigger action method in controller
1.項目規格
任務:檢查用戶是否輸入了唯一的詞典名稱。
模型(我項目中的所有實體都在單獨的類中):
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>}
在View上方是PartialView,我通過ajax查詢將其包含到引導模式中,如下所示:
function MakeGetRequest() {
var url = "/Administrator/AddDictionary/";
$.get(url, function (data) {
$("#containerId").html(data);
$("#modalId").modal('show');
});
}
2.問題
DictionaryNameExists方法未觸發。 我在此處設置了斷點,而不是“命中”它。 其次,即使我輸入現有名稱,ModelState.IsValid始終為true。 ModelState.IsValid對於MaxLengthAttribute和RequiredAttribute正常工作。
3. Whathaveyoutried.com
我向控制器添加了一個屬性,如下所示:
[OutputCache(Location = OutputCacheLocation.None,NoStore = true)]
我已經將HttpGet屬性添加到方法和RemoteAttribute中。
... data-val-remote =“詞典名稱已存在於數據庫中!” data-val-remote-additionalfields =“ *。Name” data-val-remote-url =“ / Administrator / DictionaryNameExists” ...
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);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.