javascript - 如何在 MVC 中使用 ajax 在 FormCollection 中获取 radioButton 值
问题描述
嗨,我有一个具有参数 FormCollection 的操作方法。在表单中有 2 个单选按钮,如下所示
@Html.RadioButton("radioSource", "Yes", true, new { id = "radioMoveAll", data_toggle = "tooltip", data_placement = "right", title = "Click to select", htmlAttributes }) Yes
@Html.RadioButton("radioSource", "No", false, new { id = "radioMoveAll", data_toggle = "tooltip", data_placement = "right", title = "Click to select", htmlAttributes }) No
我的操作方法如下,通过在 ajax 代码中序列化将表单集合作为参数传递。
public ActionResult StructureMove(FormCollection form)
{
Structure sourceStructure = new Structure();
sourceStructure = (Structure)HttpContext.Session["Return-Source-Structure"];
HttpContext.Session["Form"] = form;
HttpContext.Session["Source-Structure"] = sourceStructure;
string selectedNode = sourceStructure.Code;
string returnStructure = "";
StructureToMove stm = (StructureToMove)HttpContext.Session["StructureMoveObject"];
var form1 = (FormCollection)HttpContext.Session["Form"];
if (HttpContext.Request.Form["radioSource"].HasValue())
{
stm.MoveAll = HttpContext.Request.Form["radioSource"]=="Yes"?true:false;
}
if (HttpContext.Request.Form["chkreturnToSource"].HasValue())
{
stm.ReturnToDestination = HttpContext.Request.Form.GetValues("chkreturnToSource")[0] == "true" ? true:false;
}
.....
}
我的 ajax 代码通过 Ajax 将表单作为数据传递来执行 MoveController Acton 方法。
$('#btnmoveStructure').unbind('click').click(function () {
var $form = $('#frmStructureMove');
var moveData = $form.serialize();
moveData = $('#frmStructureMove').serialize();
alert(moveData);
var winMoveStructure = $("#MoveStructureModalWindow").data("kendoWindow");
$.ajax({
type: 'POST',
async: true,
cache: false,
url: '/StructureMove/StructureMove',
// dataType:"json",
//data: { "model": moveData, "form": moveData },
data: { "form": moveData },
success: function (results) {
$('#btnmoveStructure').hide();
$('#MoveStructureModalWindow').html(results);
console.log("Move window results in HTML ");
},
complete: function () {
},
done: function () {
},
error: function (jqXHR, exception) {
var msg = "";
if (jqXHR.status === 0) {
msg = 'Not connect.\n Verify Network.';
} else if (jqXHR.status === 404) {
msg = 'Requested page not found. [404]';
} else if (jqXHR.status === 500) {
msg = 'Internal Server Error [500].';
} else if (exception === 'parsererror') {
msg = 'Requested JSON parse failed.';
} else if (exception === 'timeout') {
msg = 'Time out error.';
} else if (exception === 'abort') {
msg = 'Ajax request aborted.';
} else {
msg = 'Uncaught Error.\n' + jqXHR.responseText;
}
console.log("failure : " + msg);
}
});
如何在操作方法中获取单选按钮的值。当前 Request.Form["radioSource"] 确实返回“是”,这是错误的。加载时单选按钮始终设置为“是”值。
当运行 form[0] 返回以下值
hdnStructureCode=0000641338&__RequestVerificationToken=MqBNaHfDzuRRkkvyp4tS716Fr4nRhlTANBASp3rJQYB2E1lpKLN40UuTW9e6a3caYIa2cCHCueouZbrKT7tcjc1mexSysWoXBi8P_J6gN_41&Code=0000641338&Description=Battery+String%2C+VRLA%2C+Century%2FYuasa%2C+UXH125-6%2C+6.00+V%2C+110.00+Ah& radioSource=Yes &radioDestination=&DestinationCode=DCP-SS- 00001922&DestinationDescription=电池&chkReturnToSource=true&chkReturnToSource=false
我已经突出显示了 radioSource 值(是),但是我如何在里面的 MVC C3 操作方法中检索。当我尝试了所有可能的方式时,请让我陷入困境。我不能使用键值,因为它没有。它作为查询字符串返回。
您能否告诉某人在哪里解决这个问题,无论是 ajax 还是我的 c# 代码
提前致谢
如此
解决方案
单选按钮的值可能无法正确发布,可能是因为您有两个具有相同 ID 的元素。尝试为这两个单选按钮提供唯一的 ID
@Html.RadioButton("radioSource", "Yes", true, new { id = "radioMoveAllYes", data_toggle = "tooltip", data_placement = "right", title = "Click to select", htmlAttributes }) Yes
@Html.RadioButton("radioSource", "No", false, new { id = "radioMoveAllNo", data_toggle = "tooltip", data_placement = "right", title = "Click to select", htmlAttributes }) No
这至少值得一试。无论哪种方式,您都不应该有两个具有相同 ID 的元素。
推荐阅读
- python-3.x - Python - 使用标准目录结构运行单元和集成测试
- node.js - 当我请求看板时,Trello REST API 究竟返回了什么?
- c# - 如何从列表中的多列添加字符串值
c# windows 窗体 - typescript - 如何配置 TypeScript 编译器以使用新环境中的特定附加语法来定位一个环境?
- css - 在手机上查看时如何更改图像的高度
- c# - Cosmos DB 参数化 SQL 查询不适用于双引号参数
- material-ui - 使用 Material-UI 和 create-react-app (react 16)
- python - 如何在kivy中只接受数字输入(双)
- firebase - Flutter Firestore:getToken由于令牌更改而中止
- javascript - 将图像缓冲区转换为 base64