【发布时间】:2012-08-09 04:34:51
【问题描述】:
使用 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;" />
}
我的问题是 HttPost 操作方法中的model 参数为空。但是,option 参数似乎正确传递。我不确定我是否以不应该使用的方式使用Html.Hidden 输入或问题是什么。如果需要,我可以发布更多代码。
这是我第一次尝试做这样的事情,所以在阅读了很多(看似)类似的问题之后,我仍然无法破译我想做的解决方案。我看到了很多不同的东西,比如 JSON 编码、使用 JQuery 等,但我不确定我是否需要这些东西,或者我是否可以使用 MVC 功能来完成这个(我宁愿不重新编码已经存在的东西)内置在 MVC 3) 中。如果有人能指出我正确的方向或可能给出一个小代码示例,将不胜感激。而且,考虑到我的最终目标是,如果有更好的方法来基于选项控件异步更新表单,我会非常有兴趣听到它。谢谢!
编辑:
我还注意到使用 HttpPost 的请求不会到达控制器,但 HttpGet 会。外面有人吗?这让我发疯了!
添加控制器方法:
public PartialViewResult CreateForm(OptionType opType, MyViewModel model) {
model.ApplyOptionValues(opType);
return PartialView("_CreateForm", model);
}
【问题讨论】:
-
您可以添加您要发布的方法签名吗?
标签: ajax asp.net-mvc razor asp.net-ajax