asp-for =“”

时间:2019-07-10 14:02:30

标签: asp.net-core razor

我有一个表单,在该表单中我想创建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。

2 个答案:

答案 0 :(得分:1)

通过以下方式致电您的部分联系人:

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

然后,在部分内容内:

@model ContactViewModel

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

答案 1 :(得分:0)

我会处理一系列的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是,可以是动态的