将模型从视图传递回控制器的两种方法

时间:2014-04-30 19:03:50

标签: asp.net-mvc

我是MVC的新手,对模型从视图传递回控制器的方式有一个原则问题。

通常,模型对象来自控制器,将其数据“扩展”到视图的字段中,然后消失。然后,将通过传递回控制器的FormCollection对象重新收集数据。

但是还有另一种方式,模型对象本身可以作为例如路由对象传递回控制器。一个ActionLink,URL-Action或其他什么。然后,没有必要传播和重新收集所有数据。

在我的工作场所,另一种方式被阻止,我收到有关链接字符串中禁止字符的警告。在调查这个问题时,我发现另一种方式似乎大多是未知的。 出于多种原因,我认为将模型对象传递回来而不是精心重新收集数据要好得多。

请问这种好奇心是什么原因?

更新:添加了视图示例

@model MvcApplication2.Models.TestClass
@{
    @(Model.TestValue = 111);
}

<a href="@Url.Action("ValueBack", Model)">
    <span>Test</span>
</a>



public void ValueBack(MvcApplication2.Models.TestClass testClass)
{
    int x = testClass.TestValue;
}

1 个答案:

答案 0 :(得分:2)

在MVC中,我们可以通过3种方式获取控制器中表单的值。

  • 使用FormCollection对象。
  • 使用参数。
  • 强烈输入要查看的模型绑定。

我认为不可能通过actionlink将模型发送到控制器(因为ActionLink帮助程序会生成一个锚标记,当单击它时会向服务器发送GET请求)

另一种方式:

<强> Send the id of current model so that the controller action can fetch it back from the datastore from which it initially fetched it when rendering the View.

查看:

@Ajax.ActionLink(
    "Next", 
    "Step",
    new { 
        StepId = 2,
        id = Model.Id
    }, 
    new AjaxOptions { UpdateTargetId = "stepContainer" }, 
    new { @class = "button" }
)

控制器:

public ActionResult Step(int StepId, int id)
{
    var model = Repository.GetModel(id);
    //Code
}