在asp.net中使用局部视图mvc一对一的关系

时间:2016-03-24 17:42:11

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

我在Asp.net核心项目中有两个模型:人员和地址:

class Person
{
    public int Id {get;set;}
    public string Name {get;set;}
    public int? HomeAddressId {get;set;}
    public Address HomeAddress {get;set;}   
}

class Address
{
    public int Id {get;set;}
    public string CityName {get;set;}
    ...
}

在person创建视图中,我需要使用局部视图包含地址属性的字段。

如何以元素名称与人物模型中的正确属性匹配的方式包含此部分(或写入此部分)?

例如:

<input name="HomeAddress.CityName" />

请记住,此视图应该用于除人之外的其他模型。

2 个答案:

答案 0 :(得分:0)

@Beetlejuice可能有一种更聪明的方法,但这对你现在有帮助吗?你想要修补它并将它绑定到模型(所以你可以使用剃须刀和验证等)。也许ViewBag可以与模型结合使用来设置name属性。这种一般流程都可以实现它。

调用视图:

@{ Html.RenderAction("Partial", "Home", new { id = "HomeAddress" }); }

控制器:

Public ActionResult Partial(string id)
  {
        return PartialView((object)id);
  }

Partial.cshtml

@model string

@{
   string Id = Model + ".Id ";
   string name = Model + ".CityName";
}

<input type="text" name="@Id" />
<input type="text" name="@name" />

答案 1 :(得分:0)

您可以创建一个扩展方法来生成部分视图,该视图允许您传递模型前缀,如以下帖子所示:ASP.MVC 3 Razor Add Model Prefix in the Html.PartialView extension

public static void RenderPartialWithPrefix(this HtmlHelper helper, string partialViewName, object model, string prefix)
{
    helper.RenderPartial(partialViewName,
                         model,
                         new ViewDataDictionary { 
                            TemplateInfo = new System.Web.Mvc.TemplateInfo { 
                                HtmlFieldPrefix = prefix 
                            } 
                        });
}

然后从主视图中调用它:

@Html.RenderPartialWithPrefix("MyPartialViewName", Model.HomeAddress, "HomeAddress");