2015-10-26 2 views
0

Позвольте мне предположить это, сказав, что я перехожу от классического ASP к .net, поэтому мои знания .net - это все книги, а не использование. Я работаю над платформой корзины покупок, и мне было поручено создать 3 разных типа отображения (горизонтальный слайдер, вертикальный слайдер и сетка), которые могут быть использованы двумя разными моделями.2 Различные модели должны использовать один и тот же вид

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

  1. Использования вида модели - это, кажется, как предполагается, будет использоваться только тогда, когда вам нужно объединить 2 модели в одно и то, что действительно противоположном тому, что мне нужно, Мне нужно сделать 1 просмотр для двух моделей.

  2. Сделайте отдельные виды для каждого типа. Это кажется логичным, но приведет к появлению 5 новых файлов представлений, которые почти идентичны тем, которые я уже создал, и это кажется излишним.

  3. Использование renderPartial и конвертировать модели - на самом деле не знаю, как я бы даже сделать это, но мой, хотя было renderpartial из создания реальных дисплеев (горизонтальный слайдер, вертикальный слайдер и вид сетки)

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

+0

Вид представляет собой визуальное представление вашей модели, поэтому, если у вас есть 2 разных модели для отображения, вам нужно 2 разных вида (или частичные виды). –

+0

Первоначально две разные модели будут идти на свои собственные взгляды, но затем оба конца в одном и том же представлении, но оба они были отправлены в эту же точку зрения разными способами, один использовал Html.Action, который, как я предполагаю, использовался для его преобразования, а другой использовал DisplayFor, поэтому я предположил, что это можно сделать с помощью повторное использование одних и тех же представлений. – Sirena

+0

Непонятно, что вы имели в виду под своим последним комментарием, но если взгляды являются почти идентичными, тогда вы можете использовать основной вид или макет для общих html и частичных представлений ('Html.Partial()' или '@ Html.Action()' или 'EditorTemplates' для конкретного html-модели. –

ответ

0

Так я делаю это прямо сейчас в своем проекте, я не знаю, лучший ли это или нет, но для меня все отлично.

В основном на главной странице моего сайта мне нужно иметь 2 различных моделей для обработки 2 формы отправки сообщения для того же метода в контроллере

namespace Website.Models.ViewModels 
{ 
    public class HomePageModels 
    { 
     public SearchFlyModel SearchFly { get; set; } 
     public CarRequestModel CarRequest { get; set; }  
     public int form { get; set; } 

     public HomePageModels() 
     { 
      SearchFly = new SearchFlyModel(); 
      CarRequest = new CarRequestModel(); 
     } 
    } 
} 

Затем по методу контроллера мне нужно знать, какая форма была размещена на знать, какую форму мне нужно проверить, потому что Asp.net автоматически проверяет модель, она будет по умолчанию проверять обе модели в вашей модели ViewModel, и это влияет на ModelState, и когда вы проверяете, действительно ли ваша модель действительна в ModelState.isValid, это будет return false, потому что вы разместили только одну форму, а не другую, которая полностью пуста.

Чтобы управлять этим, я следующим

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Index(HomePageModels model) 
     { 
      ModelState.Clear(); 

      if (model.form == 0) 
      { 
       try 
       {           
        ValidateModel(model.SearchFly); 
        return this.SearchFly(model.SearchFly); 
       } 
       catch (Exception e) 
       { 

       } 
      } 
      else 
      { 
       try 
       { 
        ValidateModel(model.CarRequest); 
        return this.SearchCar(model.CarRequest); 
       } 
       catch (Exception e) 
       { 

       } 
      } 


      var modelHomePage = new HomePageModels() 
      { 
       SearchFly = model.SearchFly, 
       CarRequest = model.CarRequest, 
       form=model.form 
      }; 
      return View(modelHomePage); 
     } 

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

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