2015-05-08 5 views
1

Я разрабатываю простое приложение mvc. Код выглядит следующим образом:Форма представления частичных представлений в MVC

Модель .cs:

public class CustomModel 
{ 
    public IEnumerable<lang> lstlang { get; set; } 
    public IEnumerable<org> lstOrg { get; set; } 
} 

public class lang 
{ 
    public int langid { get; set; } 
    public string langName { get; set; } 
} 
public class org 
{ 
    public int orgId { get ;set;} 
    public string orgName { get; set; } 
} 

Controller.cs

public Action Index() 
{ 
    // Get data from database and fill the model 
    var model = new CustomModel(); 
    return View(model); 
} 

public Action Partial() 
{ 
    // Get data from database and fill the model 
    var model = new CustomModel(); 
    return PartialView(model); 
} 

[HttpPost] 
public Action Partial(FormCollection frm, CustomModel model) 
{ 
    // Get data from database and fill the model 
    var model = new CustomModel(); 
    return PartialView(model); 
} 

Index.cshtml

@model CustomModel 
@Html.TextboxFor(x => x.lang.FirstOrDefault().id); 
<input type="button" id="btn" /> 
@Html.RenderPartial("Partial", model) 

Partial.cshtml

@model CustomModel 
@Html.TextboxFor(x => x.lang.FirstOrDefault().id); 
<input type="submit" id="submit" /> 

Дело в том, когда я нажимаю кнопку отправки в Partial.cshtml странице, и рассмотрим модель в методе HttpPost в public Action Partial(FormCollection frm, CustomModel model), модель содержит null для обоих списков lstlang и lstOrg, но formcollection[0] передаст выбранное значение текстового поля.

Что мне не хватает, или это правильный способ использования частичных представлений?

+1

Посмотрите на HTML вашей генераторной (в частности, 'name' атрибута) -' @ Html.textboxfor (х => x.lang.firstordefault() ид.) 'Не имеет никакого отношения к вам модель вообще , [См. Этот ответ] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943), чтобы понять некоторые основные привязки модели к коллекции. –

ответ

3

Не использовать FirstOrDefault(). Если вы хотите отправить что-то обратно на передний план с коллекциями, вам нужно будет использовать индексирование.

Public class CustomModel 
{ 
    public ICollection<lang> lstlang { get; set; } 
    public ICollection<org> lstOrg { get; set; } 
} 


@HTML.textboxfor(x=>x.lang[0].id); 
Смежные вопросы