0

我面临一个奇怪的问题。我有一个 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”这样的两个值,而不是只发送选择/提交的值。

4

3 回答 3

0

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

...
data: input
...

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

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

这是假设您在<form>标签中有单选按钮。

于 2013-05-24T13:51:37.330 回答
0

解决这个问题可能并不容易。例如,要获得一个选中的单选按钮,你可以这样做:jQuery get value of selected radio button

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

于 2013-05-24T13:51:40.390 回答
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");
    });
});

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

于 2013-05-24T14:41:48.650 回答