关于ASP.Net MVC中控制器的新手问题

时间:2010-06-11 01:24:55

标签: asp.net-mvc asp.net-mvc-2

我正在学习使用ASP.Net MVC创建NerdDinner的教程。但是,我使用的是Visual Studio 2010 Ultimate版,只有MVC2可供选择。

所以到目前为止我已经按照教程进行了操作,所有内容都非常简单,并且非常好解释,直到这个小故障。

该指南要求我在Controller文件中创建新方法,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace NerdDinner.Controllers
{
    public class DinnersController : Controller
    {
        public void Index(){
            Response.Write("<h1>Coming Soon: Dinners</h1>");
        }

        public void Details(int id) {
            Response.Write("<h1>Details DinnerID: " + id + "</h1>");
        }
    }
}

但是,当我创建Controllers文件时,Visual Studio已经创建了一个Index方法,但它看起来与教程显示的非常不同。也许这是使用MVC2做事的新方法?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace NerdDinner.Controllers
{
    public class DinnersController : Controller
    {
        //
        // GET: /Dinners/

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

我的问题是,如何以MVC2的方式重现细节和索引方法(它们在MVC中)?

这甚至是相关的吗?谢谢!

3 个答案:

答案 0 :(得分:2)

后一种方法是正确的,所有HTML输出都应该通过View,除非你做的事情非常特殊。我很惊讶这本书告诉你使用空洞进行动作。这对MVC2来说并不陌生,我想这本书可能有问题!

动作的返回类型为ActionResult,它实际上只是一种通用的基本类型,可能是HTML,重定向或文件下载。

View()是Controller上的一个方法。它将自动查找与您的Action同名的View。所以DinnersController.Index()将返回位于Views / Dinners / Index.aspx的视图。

事实上,如果右键单击View(),它将为您提供添加新视图并将其放在正确位置的选项。该视图是您的HTML所在的位置。

答案 1 :(得分:1)

您可以通过以下两种方式实现这一目标:

  1. id传递给ViewData

    public ActionResult Index()
    {
        ViewData["id"] = 10;
        return View();
    }
    
    <%= Html.Encode(ViewData["id"]) %>
    
  2. id传递给视图对象

    public ActionResult Index2()
    {
        var id = 11;
        return View(id);
    }
    
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<int>" %>
    ...
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <h2><%= Model %></h2>
    </asp:Content>
    

答案 2 :(得分:0)

显示的教程示例未显示MVC中的最佳实践。它在展示快速“Hello World”示例方面做得很好。

最佳做法应该是返回相应的ActionResult,因为这样做会使您更容易进行单元测试。如果可能,应避免直接使用Response对象。

希望这有帮助。