MVC表单收集问题

本文关键字:问题 表单 MVC | 更新日期: 2023-09-27 18:15:15

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

MVC表单收集问题

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

...
data: input
...

你可能想要的只是序列化你的表单数据,并发送它与请求:

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

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

要解决这个问题可能不那么容易。例如,要获取选中的单选按钮,可以这样做:

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

你可以把@Html。返回并劫持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()来序列化整个表单,就像我上面的人一样建议