【问题标题】:Multiple actions on the same controller and view in asp.net MVC同一控制器上的多个操作并在 asp.net MVC 中查看
【发布时间】:2009-08-31 03:35:42
【问题描述】:

如何在同一个控制器上使用多个操作?

我正在使用在 asp.net mvc 中打开新项目时出现的默认项目。

我在 homecontroller 上添加了一个 Index 操作来接受来自文本框的值...像这样

 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# 中是显而易见的。但是,那么我如何将消息返回给用户。 谢谢

【问题讨论】:

    标签: c# asp.net-mvc string response


    【解决方案1】:

    好吧,控制器根据发送的参数匹配一个路由。您可以将路线从最具体到最不具体分层,它会按顺序检查。第一个命中的获胜。

    另一个答案是强类型发送到视图的模型,或者将其存储在 ViewData 中:

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

    然后在您的视图中访问它:

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

    【讨论】:

    • 视图接受一个模型,它与数据库或其他任何东西无关,只是为视图存储数据。您可以通过定义一个类然后在视图中“继承”该类来重载该模型。重载的类可以包含多组数据,例如城市列表和产品列表(视图需要的任何内容)。
    • +1 没错。到目前为止最好的方法而不是使用 collection["???"];在我看来。
    • ViewData["Message"] 事情对我的回发操作不起作用。如果用户在文本框中输入他们的名字,我想用 Hello 和他们的名字打招呼
    【解决方案2】:

    简单方法

    在你看来

    <% 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();
    }
    

    【讨论】:

    • 知道了...抱歉,这是我犯的一个愚蠢的错误...因为我也是以实体框架的方式从数据库返回数据。我返回 view() 而不是将数据传回。所以它抛出了对象引用异常。再次感谢
    【解决方案3】:

    乔希,看看你之前问的问题。

    在那里我有&lt;%= Html.textbox("myInput", Model.myInput....

    是 Model.myInput 将模型中的值放入 yoru 文本框的文本中。

    编辑

    或者,如果您不希望它在文本框中,那么只需执行;

    编辑 2

    您可以在新的表单视图模型中添加尽可能多的项目,在这种情况下,它与数据库无关。请参阅您之前关于我在哪里声明课程的问题。

    该类可以拥有任意数量的属性。因此,您可以添加 string myResponse {get;set;} 以将响应返回到您的视图,以便您可以使用 &lt;%=Model.myResponse%&gt;

    希望这会有所帮助。

    【讨论】:

    • 我知道...但是现在..我只是在没有模型的情况下进行测试...因为我需要教一个根本不了解 mvc 的人。
    • 我认为你的意思是模型不是我需要将数据库导入项目并构建 edmx 文件等吗?
    • 我仍然认为你应该这样教它,因为它是首选方式。我实际上不是 ViewData 的忠实粉丝,但这是个人的。我总是更喜欢模型方法。见编辑 2
    • 或者创建一个这样的类并将其放在模型文件夹中......现在,我只需要显示回字符串。我正在寻找捷径,因为我是一名初学者,我接受了挑战,培训了一个人并让他们继续努力。
    • 是的,有。在上一个问题中使用第一种方法并使用 collection["strTest"] 虽然我不推荐。
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多