使用空的Razor TextBoxFor字段提交MVC

时间:2014-12-03 15:56:49

标签: c# asp.net-mvc-4 razor html.textboxfor

除非我的TextBoxFor字段中有值,否则我的MVC表单将不会提交。我正在使用TextBoxFor,因为我确实希望存储在模型属性中的字段的值。我需要以下两个解决方案中的一个,或者满足我的需求。我要么在提交表单时需要将常规TextBox的值保存到model属性,要么在TextBoxFor为空时允许提交。

目前我的代码如下:

@using (Ajax.BeginForm("PartialResults", "Students", new { LoadItemsOnly = true }, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "find-results" }))
{
<div class="inline-ct">
    <table>
        <tr>
            <td><span class="lbl">Name: </span></td>
            @Html.TextBoxFor(m => m.Filter, new { autofocus = "autofocus", id = "name" })
        </tr>
        <tr>
            <td><span class="lbl">@Html.DisplayNameFor(m => m.LocationID): </span></td>
            <td>@Html.DropDownListFor(m => m.LocationID, new SelectList(Model.Locations, "Key", "Value"))</td>
        </tr>
        <tr>
            <td><span class="lbl">@Html.DisplayNameFor(m => m.ADGuid): </span></td>
            <td>@Html.DropDownListFor(m => m.ADGuid, new SelectList(Model.Teachers, "Key", "Value"))</td>
        </tr>
        <tr>
            <td><span class="lbl">@Html.DisplayNameFor(m => m.ClassCode): </span></td>
            <td>@Html.DropDownListFor(m => m.ClassCode, new SelectList(Model.SchoolClasses, "Key", "Value"))</td>
        </tr>
        <tr>
            <td><button type="submit" class="btn-primary" id="btn-find">Find</button></td>
            <td></td>
        </tr>
    </table>
</div>

<div id="student-find-results" class="row">
</div>
}

如前所述,当TextBoxFor存在值时,此方法可以正常工作,但是如果空表单则不提交。任何帮助将不胜感激。

注意: 我尝试在按钮上添加一个onclick但是它不会提交给控制器。

1 个答案:

答案 0 :(得分:1)

首先检查您是否未在ViewModel对象中的字段上添加[required]属性,并将其传递给视图:

[Required(ErrorMessage = "")]
public string MyAttribute { get; set; }

其次,确保您的文本框字段可以使用?您的ViewModel中的关键字

public int? MyAttribute { get; set; }

第三,检查客户端字段是否有JQuery验证。 请注意,如果要禁用所有字段的验证,可以通过删除ModelState检查来修改控制器以不测试ModelState:

if(ModelState.IsValid)
{
// TODO:
}