首页 > 解决方案 > 如何在 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# 代码

提前致谢

如此

标签: javascriptjqueryajax

解决方案


单选按钮的值可能无法正确发布,可能是因为您有两个具有相同 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 的元素。


推荐阅读