2009-08-31 3 views
1

Как использовать несколько действий на одном контроллере?Несколько действий на одном контроллере и просмотр в asp.net MVC

Я использую проект по умолчанию, который появляется при открытии нового проекта в asp.net mvc.

Я добавил еще один индекс действия на HomeController принять значение из текстового поля ... как этот

string strTest; 
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Index(FormCollection frm) 
     { 
      strTest = frm["testbox"]; 

      return RedirectToAction("Index"); 
     } 

Теперь мне нужно, чтобы отобразить введенное значение обратно пользователю. Как мне это сделать?

Я попробовал это ..

public ActionResult Index() 
{ 
    this.ViewData.Add("ReturnMessage", strValue); 
    return View(); 
} 

Вот что я положил на мой взгляд ..

<% using (Html.BeginForm()) 
    { %> 
<p> 
    <%=Html.TextBox("testbox")%> 
</p> 
<p> 
    <input type="submit" value="Index" /></p> 
<p> 
    <%= Html.ViewData["ReturnMessage"] %> 
</p> 
<% } %> 

компилятор обычно не позволяет мне добавить еще один индекс с таким же конструктор для отображения введенное сообщение обратно пользователю, что очевидно в C#, я знаю. Но, как я могу вернуть сообщение пользователю. Спасибо

ответ

1

Простого метод

По вашему мнению

<% using (Html.BeginForm()) {%> 
    <%= Html.TextBox("myInput") %> 
    <%= ViewData["response"] %> 
<%}%> 

В вашем контроллере;

public ActionResult Index() 
{ 
    return View(); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(FormCollection collection) 
{ 
    ViewDate.Add("response", collection["myInput"]); 
    return View(); 
} 
+0

получил его ... извините, это была глупая ошибка, которую я сделал ... так как я также возвращал данные из базы данных объекта framework way.I вернул view() вместо передачи данных назад.so он бросил исключение ссылки на объект. Еще раз спасибо – Josh

+0

Нет проблем Джош. Рад, что мы заставили вас работать. – griegs

1

Джош, см. Предыдущий вопрос, который вы задали.

В там у меня было <%= Html.textbox("myInput", Model.myInput....

это Model.myInput, что поместит значение из модели в текст Yoru текстовое поле.

EDIT

Или, если вы не хотите его в текстовом поле, то просто сделать;

EDIT 2

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

класс может иметь как можно больше свойств. Поэтому вы можете добавить string myResponse {get;set;}, чтобы вернуть ответ на ваш просмотр, чтобы вы могли использовать <%=Model.myResponse%>

Надеюсь, это поможет.

+0

Я знаю ... но на данный момент .. Я просто делаю тест без модели ... потому что мне нужно учить кого-то, кто вообще не знает mvc. – Josh

+0

Я думаю, что модель в том смысле, что вы не хотите, чтобы мне нужно было импортировать базу данных в проект и создать файл edmx и т. Д. Правильно? – Josh

+0

Я все еще думаю, что вы должны учить это так, как это предпочтительный путь. Я на самом деле не большой поклонник ViewData, но это личное. Я всегда предпочитаю модельный подход. См. Редактировать 2 – griegs

3

Ну, контроллер соответствует одному маршруту на основе переданных параметров. Вы можете накладывать свои маршруты от наиболее специфических до наименее конкретных, это проверяет порядок. Первый побеждает.

Другой ответа либо сильно типа ваша модель отправлена ​​на ваш взгляд, или сохранить его в ViewData:

ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

Затем откройте его в Виде:

<%= Html.Encode(ViewData["Message"]) %> 
+0

View принимает одну модель, которая не имеет ничего общего с базами данных или чем-либо еще, кроме того, что она хранит данные для представления. Вы можете перегрузить эту модель, определив класс, затем «Наследовать» этот класс в представлении. Перегруженный класс может содержать несколько наборов данных, например список городов и список продуктов (что требуется для просмотра). –

+2

+1 Точно. И, безусловно, лучший подход, а не использование коллекции ["???"]; по моему мнению. – griegs

+0

ViewData ["Message"] вещь не работает над моим действием обратной передачи. Если пользователь вводит свое имя в текстовое поле, я хочу приветствовать их Hello и их имя – Josh