在Controller中获取另一个表单的值

时间:2013-09-16 20:40:40

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

我在页面上有两个表单。其中一个,例如MainForm,正在使用@using (Html.BeginForm...在提交时调用操作,而另一个RadioForm只包含一堆没有提交按钮的无线电(它已用于触发MainForm)的显示。如果在服务器端验证期间发生错误,我将从Controller返回视图。这会导致无线电被取消选择。

我在想的是获取RadioForm的选定值,以便我可以在返回后再次设置它。我该怎么做?是否有更好的方法来保持RadioForm的状态?

3 个答案:

答案 0 :(得分:2)

浏览器不会在提交的表单之外发布任何表单值,因此无法在服务器端执行此操作。一种解决方案是维护一个隐藏字段,并在主窗体中使用jQuery更新它:

@Html.HiddenFor(m => m.RadioValue, new { @class = "radio-tracker" })

为每个单选按钮添加一类,例如“无线电隐藏”,并使用以下内容:

$('.radio-hidden').click(function() {
    $('.radio-tracker').val($(this).val());
});

然后,您可以在表单的模型RadioValue上创建一个属性,它将绑定到帖子上所选单选按钮的值。

然后,当您再次返回视图时,可以使用此值预先填充单选按钮。

或者,你可以看一下使用AJAX。

答案 1 :(得分:0)

您需要将无线电放在提交的无线电上,而不是将无线电放在不同的形式上。这样您就可以将这些值传递回视图。

答案 2 :(得分:0)

您可以使用Ajax.BeginForm方法代替Html.BeginForm,这样您就可以指定更新目标。这将允许您仅更新提交的表单,而不会影响广播表单。

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "result" }))

http://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxextensions.beginform(v=vs.108).aspx