在 ASP.NET MVC 中从部分视图发布动态表单数据

Posted

技术标签:

【中文标题】在 ASP.NET MVC 中从部分视图发布动态表单数据【英文标题】:Post dynamic form data from partial view in ASP.NET MVC 【发布时间】:2021-11-30 01:28:11 【问题描述】:

我正在尝试向旧的 ASP.NET MVC 项目添加新功能。每次点击按钮都想添加新的地址表单,而且客户的地址是列表,会动态添加,问题是模型在发布时没有绑定地址列表数据。

这是我Customer的模型:

public class CustomerInfo

    public CustomerModel CUSTOMER  get; set; 
    public CustomerAddress CustomerAddresses  get; set; 

地址模型:

 public class CustomerAddresses
 
    public string Address  get; set; 
 

这是附加地址列表的 jQuery 代码:

$(document).on('click', "#addAddressItem", function (e) 
    e.preventDefault();
    $.ajax(
         url: this.href,
         cache: false,
         success: function (html) 
             $("#RegisterAddressId").append(html);
         
    );  
);

加载部分视图的操作链接:

   <div>
        <div class="address">
        </div>
        <p>
            @Html.ActionLink("add address", MVC.Applications.RegisterAddress(), new 
             id = "addAddressItem" )
        </p>
        <div id="RegisterAddressId">
        </div>
   </div>

部分视图操作:

public virtual PartialViewResult RegisterAddress()

    return PartialView(MVC.Applications.Views.CustomerAddress);

局部视图:

@model WeaponPermissions.Models.RegisterCustomerAddress
<table>
   <td class="personlistborder">
       <div class="editor-label">
          Address
       </div>
     
          <div class="editor-field">
              @Html.EditorFor(model => model.Address, new  @class = "CustomerAddressField" )
              @Html.ValidationMessageFor(model => model.Address) 
          </div>        
  </td>
 <td colspan="7"></td>
 <td>
    <span id="deleteRegisterCustomerAddress" class="outline ui-button ui-widget ui-state- 
  default ui-corner-all" role="button" aria-disabled="false">
        <span class="ui-icon-minusthick ui-icon "></span>
    </span>
  </td>
</table>

如有必要,我还应该删除附加的地址字段,这就是为什么有一个 ID 为 deleteRegisterCustomerAddress 的跨度

jQuery 将数据发布到点击操作:

buttons: (
        "Save": 
            text: "save",
            id: "btnSubmitExamApp",
            click: function () 
                var form = $('form', this);
                var validator = $(form).validate();
                if (validator.form()) 
                    debugger
                    var res = JSON.parse(form);
                     res.submit();
                
                $(this).submit();
            
         ,

我做错了什么?研究这个话题很久了,没找到解决办法

【问题讨论】:

【参考方案1】:

你可以在Request.Form["Address"]找到它 并确保“RegisterAddressId”在发布的表单中。

由于您熟悉 jquery,因此使用 clone() 而不是调用“RegisterAddress”来添加新项目会更好

【讨论】:

以上是关于在 ASP.NET MVC 中从部分视图发布动态表单数据的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 如何从嵌套对象的视图模型集合中动态创建表结构

在 asp.net core 5 MVC 视图中从 C# 代码调用 JavaScript 函数

在 ASP.NET MVC 5 中从数据库加载 Razor 视图

无法在 ASP.NET MVC 5 中从视图到控制器获取 Select2 标记值

asp.net mvc 3 和动态视图生成

如何在 ASP.NET MVC 部分视图中使用 JQuery 表排序器插件?当我在视图中插入 PartialView 时,我使用的是 ajax