将表单数据作为对象发布到服务器

时间:2016-02-03 01:53:19

标签: c# asp.net asp.net-mvc

ASP.NET可以做一些很棒的事情。是否可以将表单数据作为对象发送到服务器?

例如,有一个简单的对象:

public class MyClass{
    string a;
    string b;
}

我做了一个简单的表格:

<form>
    <input type="text" id="a" value="aaaa">
    <input type="text" id="b" value="bbbb">
</form>

如何将所有内容作为对象发送?

public void saveData(MyClass postData){

}

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。模型绑定器可以检查发布的值并尝试将它们转换为模型对象。

来自the documentation

  

MVC中的模型绑定器提供了一种将发布的表单值映射到.NET Framework类型的简单方法,并将该类型作为参数传递给操作方法。 Binders还允许您控制传递给操作方法的类型的反序列化。模型绑定器类似于类型转换器,因为它们可以将HTTP请求转换为传递给操作方法的对象。但是,它们也有关于当前控制器上下文的信息。

就您当前的代码而言,除了转换您的方法以返回ActionResult并确保它在控制器中并且有路由之外,不需要对服务器进行任何更改。

public ActionResult saveData(MyClass postData)
{
    Database.SaveData(postData); //or however you save to your database
    return RedirectToAction("Success");
}

客户端上的表单当然应该有一个action,指向映射到saveData操作方法路由的网址。对于发布一个简单对象,表单元素的name属性应该与模型对象上的属性名称匹配。

<form action="MyController/saveData">
    <input type="text" id="a" value="aaaa" name="a">
    <input type="text" id="b" value="bbbb" name="b">
</form>

尽管在Alex的回答中使用BeginForm的MVC助手也是可能的。

并且您的模型对象应该具有公共属性,因此模型绑定器可以设置它们:

public class MyClass
{
    public string a {get; set;}
    public string b {get; set; }
}

答案 1 :(得分:0)

请查看How to link HTML5 form action to Controller ActionResult method in ASP.NET MVC 4

您应该在字段中使用名称属性或

@using(Html.BeginForm())
{
   <input type="text" id="a" name="a" value="aaaa">
   <input type="text" id="b" name="b" value="bbbb">
}

您必须将表单发送到ActionResult方法:

public ActionResult SaveData(MyClass postData){

}

但最佳做法是使用视图模型,例如,您可以按照此说明http://www.edandersen.com/2013/05/28/asp-net-mvc-basics-part-1-view-model-binding/