【问题标题】:Create an input that will allow user to enter a variable list of objects in ASP.NET View [duplicate]创建一个输入,允许用户在 ASP.NET 视图中输入对象的变量列表 [重复]
【发布时间】:2016-07-21 15:25:57
【问题描述】:

花了一些时间想出一个合适的标题,我不确定我的措辞是否正确。对于我的示例,我将使用 Person 对象,但我的实际应用程序使用的是更特定于域的东西:

public class Person {
    public string Name { get; set;}
    public string Gender { get; set; }
    public string HairColor{ get; set; }
}

基本上,我的要求是允许用户输入 0 - 10 个 Person 对象,这些对象将映射到模型中的 List<Person> People 属性。

我正在考虑这样做的方式是有一个与单个人相关的输入块:

<div>
  <label for="name">Name</label>
  <input type="text" name="name">
</div>

<div>
  <label for="gender">Gender</label>
  <input type="radio" name="gender" value="male"> Male
  <input type="radio" name="gender" value="female"> Female
</div>

<div>
  <label for="hairColor">Hair Color</label>
  <input type="radio" name="hairColor" value="black"> Black
  <input type="radio" name="hairColor" value="brown"> Brown
  <input type="radio" name="hairColor" value="blonde"> Blonde
  <input type="radio" name="hairColor" value="red"> Red
</div>

底部有一个“添加另一个”按钮,它将使用 JQuery 附加这些输入的附加块。

我的问题是,如何在 html 输入标签中生成name 属性以正确绑定到List&lt;Person&gt;&lt;input type="text" name="People[0].Name"&gt; 会工作吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    将您的页面拆分为 2 个部分视图。第一个部分视图将返回已保存人员的列表。第二个部分视图将是您添加新人的视图。

    所以第一次加载您的页面时,您只是向您显示带有“添加另一个”按钮的列表。单击“添加另一个”将使用 jquery 调用 AddPerson 部分视图 getter,并将 div 替换为您刚刚调用的部分视图。

    在 AddPerson 部分视图中单击保存,然后将发布新人员并刷新列表。

    【讨论】:

    • 我忘了说,这不是表单的唯一部分。该应用程序有许多其他参数。因此,在输入这​​些块中的单个块的中间发布并不理想。如果用户可以输入每个“人”并且只在最后发布它,我会更喜欢它。但我很困惑如何配置 html 输入标签的“名称”属性以正确绑定到我的模型中的列表。
    【解决方案2】:

    我不确定您打算如何从页面获取数据并在 asp.net 端访问它。通常,您需要 runat="server" 标记用于服务器将访问的内容。

    您指定希望在单击按钮时生成该块的副本,但通过 JQuery。如果你想这样做,你需要为你试图复制的 HTML 块创建一个字符串变量。使用一些基本的字符串连接和循环,您可以在输入中包含name=name0name=gender0、...等。当您按“添加另一个”时,将 +1 添加到附加到字符串中名称的增量中,以便它们是 name=name1name=gender1 等。

    【讨论】:

    • 根据我对使用 ASP.NET MVC 的理解,当您使用表单并使用 post 请求将其发送回服务器时,它将被发送到控制器的 post 操作,然后将绑定表单元素到模型的属性。我对如何使用 JQuery 生成块有一个很好的想法,所以感谢您确认,但这不是我需要帮助的领域。
    • @StevePak 在服务器端,无论您如何访问 POST 参数,只需将计数器循环到您创建的“添加人员”块的数量。访问POST["name" &amp; counter]POST["gender" &amp; counter] 等数据。这是否更符合您的要求?
    猜你喜欢
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2013-01-17
    • 2018-11-04
    相关资源
    最近更新 更多