我是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;
}
答案 0 :(得分:2)
在MVC中,我们可以通过3种方式获取控制器中表单的值。
我认为不可能通过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
}