2012-06-05 2 views
7

Проблема в следующем: я хочу запустить 3 разных действия, но вместо этого хочу, чтобы все данные были получены от одного действия в более крупной модели.Как передать несколько моделей в ASP.NET MVC?

Я использую:

public class SearchScrapClass 
    { 
     public WClass WClass { get; set; } 
     public SClass SClass { get; set; } 
     public YClass YClass { get; set; } 
    } 

    public class WClass 
    { 
     public string title { get; set; } 
     public string link { get; set; } 
    } 
    public class SClass 
    { 
     public string title { get; set; } 
     public string link { get; set; } 
    } 
    public class YClass 
    { 
     public string title { get; set; } 
     public string link { get; set; } 
    } 

Я использую LINQ для добавления данных в этих моделях.

Я использую:

 var wikians = from info in document.DocumentNode.SelectNodes("//div[@id='span']") 
     from link in info.SelectNodes("div//a").Where(x => x.Attributes.Contains("href")) 
     select new SearchScrapClass //Main Bigger Class 
     { 
      WClass.link= link.Attributes["href"].Value, //ERROR: How to add to WClass's url ? 
      WClass.title= link.InnerText //ERROR: How to add to WClass's url ? 
     } 


var wikians = from info in document.DocumentNode.SelectNodes("//div[@id='results']") 
       from link in info.SelectNodes("p//a").Where(x => x.Attributes.Contains("href")) 
       select new SearchScrapClass //Main Bigger Class 
       { 
        YClass.link= link.Attributes["href"].Value, //ERROR: How to add to YClass's url ? 
        YClass.title= link.InnerText //ERROR: How to add to YClass's url ? 
       } 

//Also for the 3rd class (model) 


    return View(wikians); //and then return bigger class model so that i can access them in view 

Это один из способов я хочу добавить данные в ссылку и титул всех классов.

Моя попытка является добавление данных для всех 3-х классов из различных источников и передать большую модель для просмотра, так что я могу получить доступ ко всем классам, как:

@model SearchScrapClass 
@using(Html.BeginForm()) { 
    @Html.EditorFor(o => o.WClass.link) 
    ... 
} 

Пожалуйста, предложить способ

Спасибо

+4

создать ViewModel, которая связывает все три модели вместе и введите вид этой ViewModel. – Brian

+0

Я в замешательстве, почему у вас есть 3 разных класса, которые выглядят одинаково? Почему бы просто не использовать 3 разных экземпляра одного класса? – hermiod

+0

@hermiod: Actaully логика, которую я показал, выглядит аналогично [немного изменен], но источники, откуда они извлекают URL и контент, различны. Поэтому мне нужны разные классы. – Man8Blue

ответ

8

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

public class SearchScrapClassViewModel 
{ 
    SearchScrapClass searchScrap; 
    WClass wClass; 
    SClass sClass; 
    YClass yClass; 
} 

В контроллере затем инстанцирование нового ViewModel

SearchScrapClassViewModel model = new SearchScrapClassViewModel 
{ 
    ....add in your logic to fill your class objects here 


} 

return view(model); 

тогда, по вашему мнению добавить, используя для ViewModel.

@using SearchScrapClassViewModel 
+0

Не могли бы вы подробно остановиться на мнениях. Как я могу получить доступ к каждому элементу w, s, y индивидуально в представлении? – Zapnologica

1

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

public class MultiModel 
    { 
    SearchScrapClass searchScrap; 
    WClass wClass; 
    SClass sClass; 
    YClass yClass; 
    } 
+0

И как вы получаете/используете этот класс в представлении? – Zapnologica

+0

Брайан объясняет это далее, вы можете использовать Modal для доступа к каждому классу, например. @ Model.SearchScrapClass, Modal.WClasss –

0
SearchScrapClassViewModel model = new SearchScrapClassViewModel 
{ 
    ....add in your logic to fill your class objects here 


} 

какая логика мы применяем здесь «.... добавить в вашей логике, чтобы заполнить объекты здесь ваш класс»

1

Смотрите кортеж учебник http://www.dotnetperls.com/tuple или это один http://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx

Как и контроллер :

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var first = new FirstModel(); 
     var second = new SecondModel(); 
     return View(Tuple.Create(first,second)); 
    } 
} 

И вид:

@model Кортеж

<div> 
    @Model.Item1.FirstModelProp 
    @Model.Item2.SecondModelProp 
</div> 
Смежные вопросы