将表单数据作为对象发布到服务器
本文关键字:服务器 对象 表单 数据 | 更新日期: 2023-09-27 18:32:54
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){
}
是的,这是可能的。模型绑定器可以检查已发布的值,并尝试将其转换为模型对象。
从文档
MVC 中的模型绑定程序提供了一种将已发布的表单值映射到 .NET Framework 类型并将该类型作为参数传递给操作方法的简单方法。绑定器还允许您控制传递给操作方法的类型的反序列化。模型绑定器类似于类型转换器,因为它们可以将 HTTP 请求转换为传递给操作方法的对象。但是,它们还具有有关当前控制器上下文的信息。
就当前代码而言,除了转换方法以返回 ActionResult 并确保它位于控制器中并具有路由外,无需对服务器进行任何更改。
public ActionResult saveData(MyClass postData)
{
Database.SaveData(postData); //or however you save to your database
return RedirectToAction("Success");
}
当然,客户端上的窗体应该有一个指向映射到saveData
操作方法路由的 URL 的action
。对于发布简单对象,表单元素的 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 的答案一样使用 MVC 助手进行BeginForm
也是可能的。
模型对象应具有公共属性,以便模型绑定器可以设置它们:
public class MyClass
{
public string a {get; set;}
public string b {get; set; }
}
请查看如何在 MVC 4 中将 HTML5 表单操作链接到控制器 ActionResult ASP.NET 方法
您应该在字段中使用名称属性或
@using(Html.BeginForm())
{
<input type="text" id="a" name="a" value="aaaa">
<input type="text" id="b" name="b" value="bbbb">
}
您必须将表单发送到操作结果方法:
public ActionResult SaveData(MyClass postData){
}
但最佳做法是使用视图模型,例如,您可以按照此说明进行操作 http://www.edandersen.com/2013/05/28/asp-net-mvc-basics-part-1-view-model-binding/