Несколько действий на одном контроллере и просмотр в asp.net MVC - PullRequest
1 голос
/ 31 августа 2009

Как использовать несколько действий на одном контроллере?

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

Я добавил еще одно действие Index на 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 #, я знаю. Но тогда как мне вернуть сообщение пользователю. Спасибо

Ответы [ 3 ]

3 голосов
/ 31 августа 2009

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

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

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

Затем получите доступ к нему в вашем представлении:

<%= Html.Encode(ViewData["Message"]) %>
1 голос
/ 31 августа 2009

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

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

<% 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();
}
1 голос
/ 31 августа 2009

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

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

это Model.myInput, который поместит значение из вашей модели в текстовое поле текста yoru.

EDIT

Или, если вы не хотите, чтобы в текстовом поле, просто сделайте;

РЕДАКТИРОВАТЬ 2

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...