我面临一个奇怪的问题。我有一个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”,而不是发送刚刚选择/提交的值。
答案 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()来序列化整个表单,就像我上面的人一样 建议