2016-03-24 2 views
0

У меня есть две модели в основной проект Asp.net: Человек и Адрес:Используя частичный вид в ASP.NET MVC один-к-одному отношений

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;} 
    ... 
} 

В человеке создать представление мне нужно включать поля для атрибута адреса, используя для этого частичный вид.

Как включить это частичное (или записать это частичное) таким образом, чтобы имена элементов соответствовали правильным атрибутам от модели человека?

Ex .:

<input name="HomeAddress.CityName" /> 

Учитывая, что эта точка зрения должна быть использована в других, отличных от человека моделей.

+0

я не копал в этом, но вы могли бы потенциально построить custion DisplayName атрибут и использовать его. https://msdn.microsoft.com/en-us/library/system.componentmodel.displaynameattribute(v=vs.110).aspx –

+0

В вашем адресном представлении вы можете сделать следующее: @ Html.TextBox ("HomeAddress. CityName ", Model.CityName), и вы могли бы вызвать его из вашего представления Person следующим образом: @ Html.Partial (" _ Address ", Model.HomeAddress). Мне любопытно, как вы делаете свою общую цель. С тем, что я описал, вы будете ограничены каждым адресом, являющимся домашним адресом. –

+0

@PapaBurgundy, на самом деле, модели имеют только один атрибут адреса (HomeAddress - это просто пример). – Beetlejuice

ответ

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"); 
0

@Beetlejuice Вероятно, есть более умный способ, но это может помочь вам сейчас? Вы хотели бы поработать с этим и привязать его к модели (чтобы вы могли использовать бритву и проверку и т. Д.). Возможно, ViewBag может работать в сочетании с Model для установки атрибута 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" /> 
+0

Хм .. Я понял. Выглядит многообещающе. Я попробую что-то подобное этому, но передаю модель адреса частичному представлению, а не строку. – Beetlejuice

+0

Да, это действительно грубый пример. Этот поток вместе с тем, что вы уже знаете, должен быть достаточным, чтобы адаптировать что-то, что хорошо работает. –

Смежные вопросы