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",而不是只发送选定/提交的值
在您的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()来序列化整个表单,就像我上面的人一样建议