如何在 ASP.NET MVC 中保存多个具有相同名称属性的数据?

阿卜杜斯·萨塔尔·比扬

我有一个形式:剃刀视图:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group row">
        @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "col-sm-2 col-md-1 col-form-label" })
        <div class="col-sm-10 col-md-3">
            @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group row">
        @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "col-sm-2 col-md-1 col-form-label" })
        <div class="col-sm-10 col-md-3">
            @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group row">
        @Html.LabelFor(model => model.Mac, htmlAttributes: new { @class = "col-sm-2 col-md-1 col-form-label" })
        <div class="col-sm-10 col-md-3">
            <span class="add-new-icon glyphicon glyphicon-plus-sign" id="add_mac"> </span>
            @Html.EditorFor(model => model.Mac, new { htmlAttributes = new { @class = "form-control", @id = "mac_addr" } })

            @* @Html.DropDownListFor(x => Model.SelectedMac, new SelectList(ViewBag.Macs, "Value", "Text"), htmlAttributes: new { @class = "form-control", id = "mac_addr" })
        @Html.ValidationMessageFor(x => x.SelectedMac, "", new { @class = "text-danger" }) *@

        </div>
    </div>
}

渲染的 HTML:

<div class="form-group row new_mac_wrapper">
    <div class="col-md-offset-3">
        <div class="new_mac_container">
        </div>
    </div>
</div>

<div class="form-group row">
    <div class="col-md-offset-2 col-sm-10 col-md-2">
        <input type="submit" value="Register" class="btn btn-primary col-sm-offset-1" />
    </div>
</div>
}

<form action="/Users/Register" method="post">
   <input name="__RequestVerificationToken" type="hidden" value="w3GWVNW8nPHGcTz1kIBbyGu7386qDwfOFNprYBlmF8ve9KzKS47SyVOYFgf_jGFRzOum7oNKUZRKqtIinDP-ed8Lt5kP7kqHFJzrLmgG9P81">    
   <div class="form-group row">
      <label class="col-sm-2 col-md-1 col-form-label" for="Name">Name</label>
      <div class="col-sm-10 col-md-3">
         <input class="form-control text-box single-line" id="Name" name="Name" type="text" value="">
         <span class="field-validation-valid text-danger" data-valmsg-for="Name" data-valmsg-replace="true"></span>
      </div>
   </div>
   <div class="form-group row">
      <label class="col-sm-2 col-md-1 col-form-label" for="Email">Email</label>
      <div class="col-sm-10 col-md-3">
         <input class="form-control text-box single-line" id="Email" name="Email" type="text" value="">
         <span class="field-validation-valid text-danger" data-valmsg-for="Email" data-valmsg-replace="true"></span>
      </div>
   </div>
   <div class="form-group row">
      <label class="col-sm-2 col-md-1 col-form-label" for="Mac">Mac</label>
      <div class="col-sm-10 col-md-3">
         <span class="add-new-icon glyphicon glyphicon-plus-sign" id="add_mac"> </span>
         <input class="form-control text-box single-line" id="mac_addr" name="Mac" type="text" value="">
      </div>
   </div>
   <div class="form-group row new_mac_wrapper">
      <div class="col-md-offset-3">
         <div class="new_mac_container">
            <div class="col-sm-10 col-md-3 positioned_relative margin-bottom">
               <input readonly="" name="Mac" type="text" class="form-control" value="12556564">
               <span class="remove_mac remove-icon glyphicon glyphicon-minus-sign"> </span>
            </div>
            <div class="col-sm-10 col-md-3 positioned_relative margin-bottom">
               <input readonly="" name="Mac" type="text" class="form-control" value="444444">
               <span class="remove_mac remove-icon glyphicon glyphicon-minus-sign"> </span>
            </div>
         </div>
      </div>
   </div>
   <div class="form-group row">
      <div class="col-md-offset-2 col-sm-10 col-md-2">
         <input type="submit" value="Register" class="btn btn-primary col-sm-offset-1">
      </div>
   </div>
</form>

在这里,我有三个具有相同名称属性“Mac”的输入。使用 jquery 生成具有 name='Mac' 的附加输入:

$(document).ready(function(){
    $('#add_mac').on('click', function(){
        var mac = $('#mac_addr').val();
        if(!mac){
          alert('Input MAC ADRESS First');
          return;
        }
        var newMAChtml  = '<div class="col-sm-10 col-md-3 positioned_relative margin-bottom">';
            newMAChtml += '<input readonly name="Mac" type="text" class="form-control" value="'+mac+'" >';
            newMAChtml += '<span class="remove_mac remove-icon glyphicon glyphicon-minus-sign"> </span>';
            newMAChtml += '</div>';
            $('.new_mac_container').append(newMAChtml);
            $('#mac_addr').val('');
    });

    $('body').on('click', '.remove_mac', function() {
          $(this).closest('div').remove();
    });
});

我想保存这三个输入。我正在尝试如下:

[HttpPost]
public ActionResult Register(UserViewModel model)
{
    CancellationTokenSource cancelToken = new CancellationTokenSource();

    AccountRegistrationRequestMessage requerstMessage = new AccountRegistrationRequestMessage();
    requerstMessage.FullName = model.Name; 
    requerstMessage.EmailAddress = model.Email; 
    requerstMessage.MacAddresses.Add(model.Mac);

    requerstMessage.RegistrationType = AccountRegistrationEnum.IndividualAccountRegistration;

    Task<AccountRegistrationResponseMessage> response = _interactor.Handle(requerstMessage, cancelToken.Token);

    UserViewModel viewModel = _presenter.Handle(response.Result, model, ModelState);

    if (response.Result.ValidationResult.IsValid)
    {
        //return View("DetailView", viewModel);
    }
    return View(viewModel);
}

用户视图模型:

public class UserViewModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
    public string Mac { get; set; }
}

但目前只<input name="Mac" ...保存了最后一个值我想过使用 for 循环,然后通过类似的方式访问它们,form["Mac"][i]但显然这是行不通的。

我是否以正确的方式解决这个问题,如果是这样,是否有人对这可能如何工作有任何建议?

山本哲也

由于您有多个<input>具有相同name="Mac"属性的元素(一个EditorFor是动态生成的,另一个是动态生成的),首先您应该更改属性类型Mac

public string Mac { get; set; }

对这个:

public List<string> Mac { get; set; }

模型绑定器会将文本框中的值视为字符串集合,并在 POST 请求时将它们绑定在一起。之后,您可以使用AddRange以下命令检索 MAC 地址列表

[HttpPost]
public ActionResult Register(UserViewModel model)
{
    CancellationTokenSource cancelToken = new CancellationTokenSource();

    AccountRegistrationRequestMessage requerstMessage = new AccountRegistrationRequestMessage();
    requerstMessage.FullName = model.Name; 
    requerstMessage.EmailAddress = model.Email; 

    // Use ForEach() method to add IEnumerable collection into ICollection
    // requerstMessage.MacAddresses.AddRange(model.Mac); 
    model.Mac.ForEach(x => requerstMessage.MacAddresses.Add(x));

    // other stuff

    UserViewModel viewModel = _presenter.Handle(response.Result, model, ModelState);

    if (response.Result.ValidationResult.IsValid)
    {
        //return View("DetailView", viewModel);
    }

    return View(viewModel);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET MVC中保存登录会话

来自分类Dev

ASP.NET MVC两个具有相同名称的控制器,如何指定视图位置

来自分类Dev

如何在ASP.NET MVC中配置AutoMapper属性

来自分类Dev

如何在ASP.NET MVC 5中列出具有角色名称的用户

来自分类Dev

如何在Asp.net Mvc中保存和读取Cookie

来自分类Dev

如何在ASP.NET MVC中使用Grid.mvc导出数据

来自分类Dev

如何在ASP.NET MVC中使用Grid.mvc导出数据

来自分类Dev

asp.net,mvc:如何在多个cshtml文件中共享相同的下拉列表?

来自分类Dev

如何在asp.net mvc中回发期间持久保存部分视图模型数据

来自分类Dev

我如何在ASP.NET MVC页面之间保存表单数据?

来自分类Dev

如何在asp.net mvc中回发期间持久保存部分视图模型数据

来自分类Dev

如何在asp.net mvc中使用Linq从数据库中删除多个记录

来自分类Dev

如何在ASP / net MVC中创建ConnectionString的数据源属性?

来自分类Dev

如何在IIS上发布两个具有与单个站点相同的控制器名称的ASP.NET MVC 4应用程序

来自分类Dev

如何在linq asp.net mvc 5中具有动态where条件?

来自分类Dev

我如何在linq asp.net mvc 5中具有动态where条件?

来自分类Dev

如何在ASP.Net MVC中使布尔HTML5属性“有条件”?

来自分类Dev

如何在没有模型的ASP.NET 5 MVC中从查询访问数据

来自分类Dev

如何在ASP.NET MVC中上传带有其他数据的文件

来自分类Dev

如何使用asp.net mvc在数据库中保存级联下拉列表项

来自分类Dev

如何在ASP.NET MVC中保持表单的异步上载文件?

来自分类Dev

如何在ASP.NET MVC中保持表单的异步上载文件?

来自分类Dev

如何在具有数据库调用的ASP.net MVC中正确测试控制器

来自分类Dev

如何在具有数据库调用的ASP.net MVC中正确测试控制器

来自分类Dev

如何在 ASP.Net MVC 5 - Fluent API 中处理多对多相同的表(用户)

来自分类Dev

如何在URL中更改ASP.NET MVC控制器名称?

来自分类Dev

如何在asp.net mvc中的URL中更改控制器名称

来自分类Dev

如何在ASP.NET Core中的.cshtml文件中获取当前的MVC区域名称

来自分类Dev

如何在asp.net MVC上更改.cshtml文件的名称?

Related 相关文章

  1. 1

    如何在ASP.NET MVC中保存登录会话

  2. 2

    ASP.NET MVC两个具有相同名称的控制器,如何指定视图位置

  3. 3

    如何在ASP.NET MVC中配置AutoMapper属性

  4. 4

    如何在ASP.NET MVC 5中列出具有角色名称的用户

  5. 5

    如何在Asp.net Mvc中保存和读取Cookie

  6. 6

    如何在ASP.NET MVC中使用Grid.mvc导出数据

  7. 7

    如何在ASP.NET MVC中使用Grid.mvc导出数据

  8. 8

    asp.net,mvc:如何在多个cshtml文件中共享相同的下拉列表?

  9. 9

    如何在asp.net mvc中回发期间持久保存部分视图模型数据

  10. 10

    我如何在ASP.NET MVC页面之间保存表单数据?

  11. 11

    如何在asp.net mvc中回发期间持久保存部分视图模型数据

  12. 12

    如何在asp.net mvc中使用Linq从数据库中删除多个记录

  13. 13

    如何在ASP / net MVC中创建ConnectionString的数据源属性?

  14. 14

    如何在IIS上发布两个具有与单个站点相同的控制器名称的ASP.NET MVC 4应用程序

  15. 15

    如何在linq asp.net mvc 5中具有动态where条件?

  16. 16

    我如何在linq asp.net mvc 5中具有动态where条件?

  17. 17

    如何在ASP.Net MVC中使布尔HTML5属性“有条件”?

  18. 18

    如何在没有模型的ASP.NET 5 MVC中从查询访问数据

  19. 19

    如何在ASP.NET MVC中上传带有其他数据的文件

  20. 20

    如何使用asp.net mvc在数据库中保存级联下拉列表项

  21. 21

    如何在ASP.NET MVC中保持表单的异步上载文件?

  22. 22

    如何在ASP.NET MVC中保持表单的异步上载文件?

  23. 23

    如何在具有数据库调用的ASP.net MVC中正确测试控制器

  24. 24

    如何在具有数据库调用的ASP.net MVC中正确测试控制器

  25. 25

    如何在 ASP.Net MVC 5 - Fluent API 中处理多对多相同的表(用户)

  26. 26

    如何在URL中更改ASP.NET MVC控制器名称?

  27. 27

    如何在asp.net mvc中的URL中更改控制器名称

  28. 28

    如何在ASP.NET Core中的.cshtml文件中获取当前的MVC区域名称

  29. 29

    如何在asp.net MVC上更改.cshtml文件的名称?

热门标签

归档