mvc中的模型绑定

时间:2009-09-25 13:23:16

标签: asp.net-mvc modelbinders

我在表单中有一个文本框。

[查看]

<%=html.textbox("name") %>

[控制器]

 Index(string name)
    {
    name = "something";
    return View();
    }

表格提交 在这种情况下,如果不发送任何ViewData,则会保留文本框值。但是“某事”值未设置。

但是我将动作更改为 [控制器]

Index()
{
string name="something";
return view();
}

不保持该值。

真的对这个参数发生了影响。

3 个答案:

答案 0 :(得分:0)

如果要在Controller中设置html.textbox(“name”)的数据,请使用ViewData [“name”] =“something”

答案 1 :(得分:0)

您的问题不是很清楚,您的代码示例实际上并没有向ViewData或视图模型添加任何内容 - 这里是我认为您尝试做的事情......

假设您要重新填充表单并且您的视图是强类型的,您可以执行以下操作:

public ActionResult Index(String name)
{
    MyModel model = new MyModel;
    model.Name = name;
    ViewData.Model = model;
    return View();
}

视图中具有相同名称的文本框将具有从模型

中自动填充的值
<%= html.textbox("Name") %>

发布表单然后将模型对象发布到您的控制器,如下所示:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(MyModel model)
{
    // do something with the model        
    ViewData.Model = model;
    return View();
}

然后使用模型数据重新填充表单。

答案 2 :(得分:0)

控制器中的Index操作中的字符串名称映射到FormValue,如果更改它,MVC会理解它需要将FormValueCollection中的值添加到文本框中,并且您已在Index操作中更改了该值。如果你自己声明一个变量,这不起作用,因为没有绑定到formvalues。