ASP.NET MVC - 模型在部分视图中不绑定Ajax.BeginForm

时间:2018-05-18 13:53:56

标签: c# asp.net-mvc post model-view-controller model

我有一个部分View AddOptionPartial ,它使用模型 OptionViewModel 。 加载此父视图 Build 时会加载此部分视图。 此 Build 视图使用模型 BuildViewModel

使用@{Html.RenderPartial("AddOptionPartial", new OptionViewModel());}加载部分。

部分看起来像这样:

@model SurveyService.ViewModels.OptionViewModel

@{
    Layout = null;
}
@using (Ajax.BeginForm("AddOption", "Manage", new AjaxOptions { OnSuccess = "handleSavedOptionChoice(data)", HttpMethod = "Post" }))
{ 
    <div class="form-group">
        @Html.LabelFor(m => m.ChoiceText)
        @Html.TextBoxFor(m => m.ChoiceValue, new { @class = "form-control" })
    </div>
    @Html.LabelFor(m => m.ChoiceValue)
    <div class="form-group">
        <div class="btn-group" data-toggle="buttons">
            <label class="btn btn-primary">
                @Html.RadioButtonFor(m => m.ChoiceValue, 1) True
            </label>
            <label class="btn btn-primary">
            @Html.RadioButtonFor(m => m.ChoiceValue, 0) False
            </label>
            <label class="btn btn-primary active">
                @Html.RadioButtonFor(m => m.ChoiceValue, 2, true) Text
            </label>
        </div>
    </div>
    <button type="submit">Create</button>
}

如您所见,我正在尝试使用Ajax调用发布此表单。该调用涉及此功能:

public ActionResult AddOption(OptionViewModel model)
{
    ***content of function***
}

但是,在调试时,模型是一个不包含数据的OptionViewModel对象。 我无法在SO上找到理由,有人可以提出建议吗?

4 个答案:

答案 0 :(得分:1)

试试这个:

       @using (Ajax.BeginForm("AddOption", "Manage",null, new AjaxOptions { OnSuccess = "handleSavedOptionChoice(data)", HttpMethod = "Post" }))



            public ActionResult AddOptionChoice([System.Web.Http.FromBody]OptionViewModel model)
            {
                ***content of function***
            }

答案 1 :(得分:1)

@{Html.RenderPartial("AddOptionChoicePartial", new OptionViewModel());}正好通过了;一个新的,可能是空的,OptionViewModel

您应该传递预先填充的模型(来自父BuildViewModel),例如@{Html.RenderPartial("AddOptionChoicePartial", parentViewModel.SomeModel);},或者从AddOptionChoice开始构建视图模型。

(另请注意,您从"AddOptionChoicePartial"调用Html.RenderPartial,但控制器操作名为AddOptionChoice。它们应匹配)

此外,在尝试从评论中重新创建模型时,您使用的是ChoiceText和ChoiceValue,它们与OptionText和OptionValue不匹配。

答案 2 :(得分:0)

找到的代码出错:

@Html.LabelFor(m => m.ChoiceText)
@Html.TextBoxFor(m => m.ChoiceValue, new { @class = "form-control" })

@Html.RadioButtonFor(m => m.ChoiceValue, 1) True

在单个参数上设置多个值会导致该参数像列表一样运行,该列表仅创建ModelState错误并且永远不会填充模型。

对于将来遇到类似问题的任何人:调试控制器函数并查看调试器中的ModelState。

感谢所有建议的人。

答案 3 :(得分:-1)

将参数名称改为data

public ActionResult AddOption(OptionViewModel data)
{
// Do something here
}