mvc表单集合问题

时间:2013-05-24 11:38:04

标签: c# asp.net-mvc jquery

我面临一个奇怪的问题。我有一个cshtml表单:

  <label class="pre_req_questions_width">
                    @Html.RadioButton("radioGroup" + Model.ID, "1", (Model.ExpectedResponse == 1 ? true : false), new { id = "rbtnYes", style = "margin-top:0px; margin-right:10px;" })Yes</label>
                <label class="pre_req_questions_width">
                    @Html.RadioButton("radioGroup" + Model.ID, "2", !(Model.ExpectedResponse == 1 ? true : false), new { id = "rbtnNo", style = "margin-top:0px;margin-right:10px;" })No</label> 

在表单提交上,我得到这样的广播组值:

int radioValue =  int.Parse(fc.GetValue(controlID).AttemptedValue);

当我从@Html.BeginForm()调用它时它工作正常,但当我尝试通过像这样的ajax发送表单集合时:

input = $(':input')

        $.ajax({
            type: "POST",
            url: '@Url.Action("SavePrerequisiteQuestion", "Dashboard", new { id = @Model.ID })',
            data: input,
            dataType: "html",
            success: function (msg) {
             alert("fine");
            }, error: function (req, status, error) {
                    // with error   
                    alert(error);
                }
        });

它发送两个值,如“1,2”,而不是发送刚刚选择/提交的值。

3 个答案:

答案 0 :(得分:0)

在您的ajax请求中,您要将所有:input个元素作为数据发送:

...
data: input
...

您可能想要的只是serialize您的表单数据,并将其与请求一起发送:

...
data: input.closest('form').serialize()
...

假设您的单选按钮位于<form>标记中。

答案 1 :(得分:0)

解决这个问题可能并不那么容易。例如,要获取选定的单选按钮,您可以执行以下操作:jQuery get value of selected radio button

所以你不能只接受所有输入并从中获取值......相反,你必须有更多的选择性方法,并适当地处理不同的元素。复选框和选择也会有类似的问题。

答案 2 :(得分:0)

你可以重新放入@ Html.Beginform并在你的jQuery中劫持表单提交

$('#formID').on('submit', function(e){
    e.preventDefault();  // Just to stop the automatic Non Ajax submission of the form

    $.post($(this).attr('action'), $(this).serialize(), function (data) {
       //do stuff on success callback
       alert("fine");
    });
});

您可以通过以下路径从Html.BeginForm本身继承操作路径 $(本).attr( '行动') 注意:如果您想手动将路径放在那里,您仍然可以取而代之 从形式 然后使用$(this).serialize()来序列化整个表单,就像我上面的人一样 建议