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

本文关键字:服务器 对象 表单 数据 | 更新日期: 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/