2012-06-15 2 views
0

У меня есть опыт работы с формами ASP.NET, но новый для MVC.ASP.NET MVC 3 Razor- Получить данные из настраиваемого редактора

Как я могу получить данные из общих просмотров при обратной передаче?

В ASP.NET Forms я могу написать что-то вроде этого:

ASP.NET Forms: код

Модель:

public class MyModelItem 
{ 
    // Just TextBox is enough for editing this 
    public string SimpleProperty { get; set; } 

    // For this property separate NestedItemEditor.ascx is required 
    public MyModelNestedItem ComplexProperty { get; set; } 
} 

public class MyModelNestedItem 
{ 
    public string FirstProperty { get; set; }   
    public string SecondProperty { get; set; } 
} 

Поведение:

Управление для редактирования MyModelNeste dItem является отдельным элементом управления ASCX. NestedItemEditor.ascx

Это, например, может быть намного сложнее, чем MyModelNestedItem, я просто хочу дать представление о том, что я имею в виду.

Теперь, когда я показываю этот элемент для редактирования, я показываю один asp: TextBox и один NestedItemEditor.ascx. На обратной стороне страницы я собираю данные от обоих и все.

Проблема с MVC:

Когда я пытаюсь реализовать этот сценарий с MVC, я использую индивидуальные EditorFor (за счет использования UIHint и создания общего взгляда). Итак, этот общий вид Views \ Shared \ EditorTemplates \ MyModelNestedItem.cshtml теперь может отображать данные, уже находящиеся в свойстве MyModelNestedItem, но я не знаю, как заставить его возвращать новые введенные данные.

Когда родительский контроллер получает запрос на отправку, данные, по-видимому, находятся в Request.Form, но который является цивилизованным способом его достижения? Разумеется, лучшее решение будет, если данные будут автоматически загружаться в файл 0M122.

ответ

2

Действие, которое вызывается на пост должно быть что-то вроде:

[HttpPost] 
    public ActionResult Index(MyViewModel mdl) 

Тогда все свойства модели, которые имеют входные элементы управления (или скрытые входы) на форме будет иметь данные, которые был введен на форме (или переданной ей или измененной javascript, в случае скрытых входов).

Предполагается, что MyViewModel - это модель, на которую ссылается ваш взгляд.

0

Пишем метод ActionResult в контроллере со сложным типом просто работал для меня:

public class Topic 
{ 
    public Topic() 
    { 

    } 
    public DetailsClass Details 
    { 
     get; 
     set; 
    } 

} 

public class DetailsClass 
{ 
    public string TopicDetails 
    { 
     get; 
     set; 
    } 
} 

Вид:

@modelTopic 
@using (Html.BeginForm("Submit","Default")) 
{ 
    @Html.EditorFor(m=>m.Details) 
    @:<input type="submit" /> 
} 

Контроллер:

public ActionResult Index() 
    { 

     Topic topic = new Topic(); 
     return View(topic); 
    } 


    public ActionResult Submit(Topic t) 
    { 
     return View(t); 
    } 

Когда занесена, Topic t содержит значение, указанное в редакторе (предположим, что у вас есть cust om для сложного типа, DetailsClass в моем примере)

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