Вопрос новичка о контроллерах в ASP.Net MVC - PullRequest
1 голос
/ 11 июня 2010

Я следую руководству по созданию NerdDinner с использованием ASP.Net MVC.Однако я использую редакцию 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();        
        }
    }
}

Мой вопрос: как я могу воспроизвести метод Details и Index (они в MVC) для MVC2?

Это вообще актуально?Спасибо!

Ответы [ 3 ]

2 голосов
/ 11 июня 2010

Последний способ верен, весь вывод HTML должен проходить через View, если вы не делаете что-то исключительное. Я удивлен, что книга говорит вам использовать пустоты для действий. Это не ново для MVC2, я думаю, что в книге что-то не так!

Действия имеют возвращаемый тип ActionResult, который на самом деле является просто базовым базовым типом, который может быть HTML, перенаправлением или загрузкой файла.

View () - это метод на контроллере. Он будет автоматически искать представление с тем же именем, что и ваше действие. Поэтому DinnersController.Index () вернет представление, расположенное в Views / Dinners / Index.aspx.

Фактически, если вы щелкнете правой кнопкой мыши на слове View (), это даст вам возможность добавить новый вид и поместить его в нужное место. Представление - это то, где должен быть ваш HTML.

1 голос
/ 11 июня 2010

Это можно сделать двумя различными способами:

  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>
    
0 голосов
/ 11 июня 2010

Показанный учебный пример не показывает лучшие практики в MVC.Это хорошо демонстрирует быстрый пример "Hello World".

Рекомендуется возвращать соответствующий ActionResult, потому что это облегчит вам юнит-тестирование.По возможности следует избегать прямого использования объекта Response.

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

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