【问题标题】:MVC 3 POST data and the Id fieldMVC 3 POST 数据和 Id 字段
【发布时间】:2012-03-05 12:06:33
【问题描述】:

我的 MVC 3 项目中有一个模型的强类型剃刀视图。基本上它用于编辑模型。

模型包含一个用于数据库键的 Id 字段和一些其他字符串字段(它是一个 viewModel,但不是问题的重点)。

在视图中,我只有一个表单和一个提交按钮,没有别的。当视图发布到控制器时,控制器中的模型的所有字段都为空,除了似乎已自动填充的 Id 字段。

在视图中没有相应的“输入”元素的情况下,Id 字段如何以及在何处填充到模型中。

这可能是一个愚蠢的问题,但即使只是指向我应该阅读的内容的链接,我也将不胜感激。谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    我敢打赌它来自 url 作为路由参数。

    例如,您有以下控制器:

    public class HomeController: Controller
    {
        public ActionResult Index(int id)
        {
            vqr model = GetModel(id);
            return View(model);
        }
    
        [HttpPost]
        public ActionResult Index(MyViewModel model)
        {
            // the model.Id property will be automatically populated here
            // because the request was POST /home/index/123
            ...
        }
    }
    

    还有以下观点:

    @model MyViewModel
    @using (Html.BeginForm())
    {
        <button type="submit">OK</button>
    }
    

    现在您导航到 GET /home/index/123 并获得以下标记:

    <form action="/home/index/123" method="post">
        <button type="submit">OK</button>
    </form>
    

    注意到表单的action 属性了吗?这就是 id 的来源。基本上,Html.BeginForm() 帮助器在生成动作属性时使用当前 url,并且由于当前 url 是 /home/index/123,所以它就是被使用的。

    并且因为如果您在 Global.asax 中保留了默认路由,则在 url 的末尾使用了 {id} 路由标记,默认模型绑定器成功地将其绑定到您的视图模型的 Id 属性.

    【讨论】:

    • 非常感谢。我已经猜到它来自路由参数,但不确定如何。
    【解决方案2】:

    您可能正在访问类似于以下内容的 URL:/MyObject/Edit/15

    这将返回您的空白表单所在的页面。

    接下来发生的事情是您有一个 HTML.BeginForm() 将返回到 /MyObject/Edit/15

    现在由于回发具有相同的格式,您的路由规则会选择“15”并将其绑定回您的 ID。

    【讨论】:

      【解决方案3】:

      您是否将 ID 字段添加为隐藏字段?

      例如 @Html.HiddenFor(x=> x.ID)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 2012-05-27
        • 2011-10-18
        • 2013-10-12
        • 2012-07-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多