如何将表单值映射到ASP.NET MVC HTTP-Post方案的对象?

时间:2009-03-24 13:53:37

标签: asp.net-mvc

我有一个ASP.NET MVC应用程序的简单表单。我有一个表单属性,其名称与实际属性名称不同(无论出于何种原因)。

我知道有[Bind(Exlcude="", Include="")]属性,但在这种情况下,这对我没有帮助。

我也不希望在Action方法签名中有一个(FormsCollection formsCollection)参数。

还有另一种定义映射的方法吗?

例如

<%= Html.ValidationMessage("GameServer", "*")%>  

导致..

<select id="GameServer" name="GameServer">
    <option value="2">PewPew</option>
</select>

这需要映射到..

myGameServer.GameServerId = 2; // PewPew.

喝彩!

3 个答案:

答案 0 :(得分:1)

我相信你需要在你的控制器参数中定义它,否则它不会有任何线索接受什么。

public ActionResult GameServer(string GameServer){
    GServer myGameServer = new GServer();
    myGameServer.GameServerId.ToString() = GameServer;
    return View("GameServer");
}

您可以在视图页面上传入您尝试查找的参数的名称/ ID,它会根据您视图中的ID自动知道要接收的值。

答案 1 :(得分:1)

将FormCollection作为参数传递出了什么问题?我必须做与你相同的事情,我只是在BindAttribute中排除了GameServer属性。

您必须注意的另一件事是Html.ValidationMessage("GameServer", "*")不起作用,因为底层模型不包含GameServer属性。您必须将其添加到模型中。我不知道是否有更好的方法可以做到,我没有找到,但需要让ValidationMessage作品

答案 2 :(得分:0)

您可以创建自己的ModelBinder(see how to)来进行自定义映射 一个矫枉过正的IMO,但你可能有你的理由......