MVC 5 中 Ajax.BeginForm 的模型绑定失败

Model binding is Failing for Ajax.BeginForm in MVC 5

我的视图是为列表生成的脚手架。列表的模型是:

public class LogsViewModel
{
        public string Category { get; set; }
        public string ClientIP { get; set; }
        public string StartDate { get; set; }
        public string EndDate { get; set; }
        public string Message { get; set; }
}

为了过滤整个列表,我提供了一个 bootstrap-modal 表单,它有多个输入元素,例如:category、clientip、date 和 message。此模态的形式按以下方式使用 Ajax.BeginForm:

@using (Ajax.BeginForm(
                       new AjaxOptions
                       {
                       HttpMethod = "get",
                       InsertionMode = InsertionMode.Replace,
                       UpdateTargetId = "results"
                       }))    
                {
                    <fieldset>
                    <div class="form-group">
                        <label for="recipient-name" class="control-label">Category:</label>
                        <select class="form-control" id="Category">
                            <option>Information</option>
                            <option>General Error</option>
                        </select>
                        @*<input type="text" class="form-control" id="category">*@
                    </div>
                    <div class="form-group">
                        <label for="recipient-name" class="control-label">IP:</label>
                        <input type="text" class="form-control" id="ClientIP">
                    </div>
                    <div class="form-group" id="startDTPicker" style="position:relative">
                        <label for="recipient-name" class="control-label" id="startDate">Start Date:</label>
                        <input type="text" class="form-control" id="StartDate">
                    </div>
                    <div class="form-group" id="endDTPicker" style="position:relative">
                        <label for="recipient-name" class="control-label" id="endDate">End Date:</label>
                        <input type="text" class="form-control" id="EndDate">

                    </div>
                    <div class="form-group" id="startDTPicker">
                        <label for="recipient-name" class="control-label">Message:</label>
                        <input type="text" class="form-control" id="Message">
                    </div>


                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                        <input type="submit" class="btn btn-primary" value="Show Results" />
                    </div>
                </fieldset>
           }

然后在控制器中,我试图获取这些参数 (category=...)。我已将 ActionMethod 声明为:

public ActionResult Index(LogsViewModel viewModel)
{
    //all the properties are null when the Ajax request invokes this method
}

导致问题的原因是什么,最好的处理方法是什么?

正如我在您的视图代码中看到的那样,您没有在所有 input 标签上设置 name 属性。但是你需要它们,它们应该匹配你的模型 属性 名称,因为当你 post 你的值到服务器时它们使用类似的键。

我的意思是你应该改变这个:

<input type="text" class="form-control" id="ClientIP">

对于所有标签:

<input type="text" name="ClientIP" class="form-control" id="ClientIP">