簡體   English   中英

ASP.NET MVC RemoteAttribute不會在控制器中觸發操作方法

[英]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

  • 我已經在web.config中啟用了設置(ClientValidationEnabled和UnobtrusiveJavaScriptEnabled)
  • 我向控制器添加了一個屬性,如下所示:

    [OutputCache(Location = OutputCacheLocation.None,NoStore = true)]

  • 我已經將HttpGet屬性添加到方法和RemoteAttribute中。

  • 我已經包含了JavaScript庫
  • 服務器正確生成了我的標簽:

... data-val-remote =“詞典名稱已存在於數據庫中!” data-val-remote-additionalfields =“ *。Name” data-val-remote-url =“ / Administrator / DictionaryNameExists” ...

  • 正如Darin回答的那樣,我已將他的代碼添加到“ MakeGetRequestFunction”中
  • 最后,我清除了瀏覽器(Chrome)緩存。
  • 我的ViewModel是一個包含Entity類的類,所以我想綁定我的屬性,但是它對我也不起作用

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM