为了账号安全,请及时绑定邮箱和手机立即绑定

单击 .NET Core 中的单选按钮时未提交表单

单击 .NET Core 中的单选按钮时未提交表单

阿晨1998 2021-09-30 17:59:56
我正在尝试在切换(单选按钮)上提交表单。我使用 JQuery 提交表单如下:形式:        @for (var item = 0; item < Model.Count(); item++)        {        <form id="myform" action="xx" controller="xxx" method="post">            <input type="hidden" asp-for="@Model[item].a" />            <input type="hidden" asp-for="@Model[item].b" />            <input type="hidden" asp-for="@Model[item].c" />            <input type="hidden" asp-for="@Model[item].d"  />            <tr>                <td>                    @Html.DisplayFor(model => model[item].a)                </td>                <td>                    @Html.DisplayFor(model => model[item].b)                </td>                <td>                    @Html.DisplayFor(model => model[item].c)                </td>                <td>                    @if(Model[item].istrue)                    {                        <input asp-for="@Model[item].istrue" type="radio" value="@Model[item].istrue" class="form-check form-control"/> @Model[item].istrue                        <input asp-for="@Model[item].istrue" type="radio" value="False" class="form-check form-control" />                    }                    else                      {                        <input asp-for="@Model[item].istrue" type="radio" value="@Model[item].istrue" class="form-check form-control" /> @Model[item].istrue                        <input asp-for="@Model[item].istrue" type="radio" value="True" class="form-check form-control" />                    }                </td>            </tr>        </form>Javascript:@section Scripts {        <script type="text/javascript">    $('input[type=radio]').on('click', function () {        console.log("trigger works");        $(this).closest("form").submit();    });</script>}控制器:[HttpPost]public IActionResult someaction(somemodel s){----}我在应该触发的控制器动作上放置了断点。控件不去动作但是,切换时console.log会打印消息我不太明白我做错了什么!!!项目链接https://github.com/dev-agk/WebFormList.NET 小提琴dotnetfiddle.net/8IzLE8
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您的代码中有几个错误:


首先,你的代码


<form id="myform" action="xx" controller="xxx" method="post">

将被渲染成


<form id="myform" action="xx" method="post">

请注意action属性xx不是xxx/xx。我想您应该使用asp-action和asp-controller来修复您的代码,例如:


<form id="myform" asp-action="MyTestActionName" asp-controller="MyTestControlerName" method="post">

其次,有两种具有相同idof 的形式,myform最好为 id 分配不同的名称或id使用删除属性$(this).closest("form").submit():


@section Scripts {

    <script type="text/javascript">

        $('input[type=radio]').on('click', function () {

            console.log("trigger works");

            $(this).closest("form").submit();

        });

    </script>

}

最后,当您input使用asp-for以下代码编写TagHelper 时:


<input type="hidden" asp-for="@Model[item].a" />

<input type="hidden" asp-for="@Model[item].b" />

...

它会被渲染成类似的东西:


<input type="hidden" id="z1__a" name="[1].a" value="a1">

<input type="hidden" id="z1__a" name="[1].b" value="b1">

...

请注意,名称以 为前缀[1].。这会使绑定变得困难。因为您想将单个项目提交到服务器,就个人而言,我建议您应该将其替换@Model[item].为@item.:


@for( var i = 0; i < Model.Count(); i++ )

{

    var item = Model[i];

    <div style="border: 1px solid ;">

    <form id="myform" asp-action="Test" asp-controller="Home" method="post">

        <input type="hidden" asp-for=" @item.a " />

        <input type="hidden" asp-for=" @item.b " />

        <input type="hidden" asp-for=" @item.c " />

        <input type="hidden" asp-for=" @item.d " />

        ... 


查看完整回答
反对 回复 2021-09-30
  • 2 回答
  • 0 关注
  • 283 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号