使用 ASP.NET MVC 3 和 Razor,我有一个针对MyViewModel
类的强类型视图。在视图中,我有一个由一组单选按钮组成的 AJAX 表单。在它下面,我有一个普通的 HTML 表单,用于收集MyViewModel
. 根据在 AJAX 表单中选择了哪个单选按钮,我想用一组或另一组默认值更新 HTML 表单。在 AJAX 表单中,我尝试发布两条数据:1) 表示选择的选项的值(基于单选按钮value
参数),以及 2)Model
来自视图的值。我希望控制器操作根据收到的选项更新模型,然后返回带有更新的模型对象作为参数的局部视图。我该怎么做呢?这是我尝试的 AJAX 表单的代码:
@using (Ajax.BeginForm("MyAction", "MyController",
new AjaxOptions {
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "createForm"
}))
{
<div id="formOptions">
@foreach (Option op in Model.GetOptions()) {
<div class="editor-field">
@Html.RadioButton("option", op.OptionType, false, new { @id = op.ID, @name = op.ID, @title = @op.Description, @onfocus = "javascript:$(this).closest('form').find(':submit').first().click()" })
<label for="@op.ID">@op.Name</label>
</div>
}
</div>
@Html.Hidden("model", Model)
<input type="submit" value="Select" style="display:none;" />
}
我的问题是model
HttPost 操作方法中的参数为空。但是,该option
参数似乎正确传递。我不确定我是否以Html.Hidden
不应该使用的方式使用输入或问题是什么。如果需要,我可以发布更多代码。
这是我第一次尝试做这样的事情,所以在阅读了很多(看似)类似的问题之后,我仍然无法破译我想做的解决方案。我看到了很多不同的东西,比如 JSON 编码、使用 JQuery 等等,但我不确定我是否需要这些东西,或者我是否可以使用 MVC 功能来完成这个(我宁愿不重新编码已经存在的东西)内置在 MVC 3) 中。如果有人能指出我正确的方向或可能给出一个小代码示例,将不胜感激。而且,考虑到我的最终目标是,如果有更好的方法来基于选项控件异步更新表单,我会非常有兴趣听到它。谢谢!
编辑:
我还注意到使用 HttpPost 的请求不会到达控制器,但 HttpGet 会。外面有人吗?这让我发疯!
添加控制器方法:
public PartialViewResult CreateForm(OptionType opType, MyViewModel model) {
model.ApplyOptionValues(opType);
return PartialView("_CreateForm", model);
}