首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET MVC NerdDinner教程问题

ASP.NET MVC NerdDinner教程问题
EN

Stack Overflow用户
提问于 2010-07-26 02:08:03
回答 2查看 558关注 0票数 4

我正在学习Scott Guthries MVC tutorial (http://nerddinnerbook.s3.amazonaws.com/Part6.htm),但有些东西我不明白。

名为DinnersController的控制器类具有以下创建方法:

代码语言:javascript
运行
复制
    public ActionResult Create()
    {
        Dinner dinner = new Dinner()
        {
            EventDate = DateTime.Now.AddDays(7)
        };

        return View(new DinnerFormViewModel(dinner));
    }

    [AcceptVerbs( HttpVerbs.Post)]
    public ActionResult Create(Dinner dinner)
    {
        if (ModelState.IsValid)
        {
            try
            {
                dinner.HostedBy = "SomeUser";
                dinnerRepository.Add(dinner);
                dinnerRepository.Save();

                return RedirectToAction("Details", new { id = dinner.DinnerID });
            }
            catch
            {
                foreach (var violation in dinner.GetRuleViolations())
                    ModelState.AddModelError(violation.PropertyName, violation.ErrorMessage);                    
            }
        }

        return View(new DinnerFormViewModel(dinner));
    }

第一个方法导致显示页面Create.aspx,该页面显示对象类型'DinnerViewFormModel‘的表单数据。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NerdDinner.Controllers.DinnerFormViewModel>" %>

类'DinnerViewFormModel‘包含一个名为’晚餐‘的属性,因此显示晚餐类型对象的相关信息是通过调用:

<label for="Title">Title:</label> <%= Html.TextBox("Title", Model.Dinner.Title) %>

我知道到目前为止发生了什么。但是,Create.aspx包含一个提交类型按钮:

<input type="submit" value="Create" />

单击该按钮时,将调用以下方法:

代码语言:javascript
运行
复制
    [AcceptVerbs( HttpVerbs.Post)]
    public ActionResult Create(Dinner dinner)

我不明白的是,如果表单的模型数据是一个“DinnerViewFormModel”对象,那么MVC如何知道需要将哪个“晚餐”对象传递给Create方法呢?

有没有人能开导一下我?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-26 02:15:18

AFAIK,MVC只是尝试将POST中可用的属性映射到它提供的参数。因此,它不需要知道类型,它只需要使用默认构造函数创建对象,并将表单值映射到创建的对象-这就是您获得的方法参数值。

顺便说一下:您还会注意到,视图输出不包含对DinnerDinnerFormViewModel类的任何引用。

票数 3
EN

Stack Overflow用户

发布于 2010-07-26 02:52:03

它被称为“模型绑定”,并内置于ASP.NET MVC中。您的操作方法需要数据,传入的HTTP请求携带您需要的数据。问题是数据被嵌入到POST后的表单值中,也可能嵌入到URL本身中。进入DefaultModelBinder,它可以神奇地转换表单值并将数据路由到对象。模型绑定器允许您的控制器代码与询问请求及其相关环境的肮脏行为保持干净的分离。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3330382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档