【问题标题】:"Dynamic" data in an asp-for=""asp-for="" 中的“动态”数据
【发布时间】:2019-11-20 04:23:21
【问题描述】:

我有一个表格,我想在该表格中创建 4 个联系人。我不想为每个联系人创建一个局部视图,而是想创建一个局部视图“来统治他们”。

示例:

public class FormViewModel
{
  public string A {get;set;}
  public string B {get;set;}
  public ContactViewModel ContactC {get;set;}
  public ContactViewModel ContactD {get;set;}
  public ContactViewModel ContactE {get;set;}
  public ContactViewModel ContactF {get;set;}
}

public class ContactViewModel
{
  public string ContactType {get;set;}
  public string FirstName {get;set;}
  public string LastName {get;set;}
}

我有一个 ContactCreatePartial 模型:ContactViewModel。

在这部分中,我想为 ContactC 的“名字”创建一个输入。 通常我会使用:

<input asp-for="FirstName">

但是,因为我想重用部分,所以我需要在“asp-for”中放入的值是动态的:

<input asp-for="@(Model.ContactType).FirstName">

作为输出:for="ContactC.FirstName" 和 id="ContactC_FirstName"。不幸的是,这不起作用。有什么办法可以做到吗?

我知道我可以写出所有的 html,但这样我也必须写出我的验证等。如果可能的话,我想自动生成我的 html。

【问题讨论】:

    标签: asp.net-core razor


    【解决方案1】:

    通过以下方式调用您的部分:

    <partial name="_ContactPartial" for="ContactC" />
    

    然后,在部分内部:

    @model ContactViewModel
    
    <input asp-for="FirstName" />
    <!-- etc -->
    

    【讨论】:

      【解决方案2】:

      我会使用一系列 if,因为 n 对象可以是动态的

      @if (Model.ContactType == "ContactC"){
          <input asp-for="ContactC.FirstName" id="ContactC_FirstName">
      }else if(Model.ContactType == "ContactB"){
          <input asp-for="ContactB.FirstName" id="ContactB_FirstName">
      }
      

      编辑:

      使用问题和语句中提供的数据,我想出了以下解决方案

      <input asp-for="FirstName" id="@(Model.ContactType)_FirstName">
      

      如果是这种情况,我会使用 id 作为参数来决定存储什么,因为 id 是的,可以是动态的

      【讨论】:

      • 感谢您的回答,但我的部分使用'ContactViewModel',所以它不知道'ContactC.FirstName',它知道'FirstName'。其次,为了可读性,我宁愿创建 4 个不同的部分而不是 if/else 语句
      • 在这种情况下,我认为我有一个更简单的解决方案,我将编辑答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2012-12-02
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多