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){
}
答案 0 :(得分:1)
是的,这是可能的。模型绑定器可以检查发布的值并尝试将它们转换为模型对象。
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/