2015-05-18 2 views
0

У меня есть представление ASP/MVC, которое отображает данные из модели, а также содержит частичный вид с формой, использующей другую модель. Есть ли способ объединить их в одну точку зрения? Результатом будет то, что значения отображения основаны на модели A, но форма на странице представляет модель B. Возможно ли это?Несколько моделей в ASP-представлении

+0

Создайте модель, которая предоставляет модели, необходимые для представления в качестве свойств, например 'myViewModel.CustomerModel.CustomerName' и' myViewModel.OrderModel.OrderNumber' и т. д. – DGibbs

+0

Если это ASP.NET, а не классический ASP, всегда указывайте, что это ASP.NET, так как они очень разные. Я уже знаю, что вы имеете в виду ASP.NET, но новичок может этого не сделать. – maniak1982

+0

Я добавил тег для asp.NET ... Я стараюсь не помещать этот материал в заголовок/вопрос, потому что модератор модератора любит оставлять раздражающие комментарии о том, как мои вопросы не следуют определенному набору правил. – Sam

ответ

1

Если две вещи тесно связаны между собой, вы можете использовать модель представления для работы как с вашей точки зрения:

public class FooViewModel 
{ 
    public SomeModelForDisplay Foo { get; set; } 
    public SomeModelForForm Bar { get; set; } 
} 

в своем действии, инициализировать как:

public ActionResult Foo(int id) 
{ 
    var foo = db.Foos.Find(id); 
    if (foo == null) 
    { 
     return new HttpNotFoundResult(); 
    } 

    var model = new FooViewModel 
    { 
     Foo = foo, 
     Bar = new SomeModelForForm() 
    }; 
    return View(model); 
} 

Если две вещи не связаны вообще или, в частности, если частичное вызывается чем-то вроде вашего макета вместо немедленного просмотра, тогда более целесообразно использовать дочернее действие. По сути, вы будете просто обрабатывать дисплей часть, как будто ничего другого происходит:

public ActionResult Foo(int id) 
{ 
    var foo = db.Foos.Find(id); 
    if (foo == null) 
    { 
     return new HttpNotFoundResult(); 
    } 

    return View(foo); 
} 

Затем вы добавите еще одну акцию, чтобы обрабатывать форму:

[ChildActionOnly] 
public ActionResult SomeForm() 
{ 
    var model = new SomeModelForForm(); 
    return PartialView("_SomeForm", model); 
} 

Затем добавьте частичный вид для визуализации только формы:

Просмотры \ Foo \ _SomeForm.cshtml

@model SomeModelForForm 

<!-- form fields here --> 

Затем в вашем представлении/расположение - в основном там, где вы хотите, чтобы форма на самом деле будет отображаться:

@Html.Action("SomeForm", "Foo") 

Где "Foo" здесь имя контроллера этого ребенка действие in

0

Я рекомендую вам использовать модель A, содержащую модели B и C. B загружается при загрузке страницы, а C загружается частичным.

Еще одно решение coule bethat у вас есть модель A (данная страница для бритвы), затем добавьте модель B на страницу, используя частичную, а затем возвратите смесь A и B. Вы просто обратили внимание на именование из полей для того, чтобы сделать модель связывания работать должным образом, например

а имеет

  • Firstname
  • ЬавЬЫате

и в имеет

  • улица
  • телефон

Затем, если вы поставите edirotfor оба поля, модель, которая может быть получена в контроллере может быть модель C, которая имеет

  • ПгвЬЫате
  • LastName
  • улица
  • телефон
Смежные вопросы