我有一个部分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上找到理由,有人可以提出建议吗?
答案 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
}