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

时间:2015-12-28 08:52:04

标签: asp.net-mvc ajax.beginform

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

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
}

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

1 个答案:

答案 0 :(得分:3)

正如我在您的查看代码中看到的那样,您在所有name标记上都没有input属性。但是你需要它们,它们应该匹配你的模型属性名称,因为当你将值发布到服务器时它们就像使用键一样。

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

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

对于所有标签:

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