简化从表单中获取数据的过程
本文关键字:数据 过程 获取 表单 | 更新日期: 2023-09-27 17:59:00
我填写了表格,并在服务器上收到了如下数据:
model.Firstname = HttpContext.Current.Request.QueryString["Firstname"];
model.Lastname = HttpContext.Current.Request.QueryString["Lastname"];
model.Middlename = HttpContext.Current.Request.QueryString["Middlename"];
model.Avatar = HttpContext.Current.Request.QueryString["Avatar"];
model.Birthday = HttpContext.Current.Request.QueryString["Birthday"];
型号:
public int CustomerID { get; set; }
public int StatusID { get; set; }
public string Firstname { get; set; }
public string Lastname{ get; set; }
public string Middlename { get; set; }
public string Birthday { get; set; }
有没有什么方法可以让它更容易并将这些行组合起来?
您可以编写一个扩展方法并使用反射来设置属性,如下所示:
public static void SetProperties<T>(this T source, HttpContext context)
{
var properties = typeof(T)
.GetProperties(BindingFlags.Instance | BindingFlags.Public);
var values = context.Request.QueryString;
foreach (var prop in properties)
{
if (values.AllKeys.Contains(prop.Name))
{
prop.SetValue(source,values[prop.Name]);
}
}
}
用法:
mode.SetProperties(HttpContext.Current);
这假设查询字符串中的键与model
的属性名称完全匹配。
如果你使用的是asp.net mvc,你不必通过HttpContext专门分配每个属性,你可以直接发送表单的序列化数据,并在函数中作为强类型模型对象接收,比如:
[HttpPost]
public TMServiceResponse Customer_Save(CustomerModel obj)
{
//make your form actionmethod like this
}
并从如下视图发布:
var form = jQuery("#myformId");
jQuery(".btnCustomerSubmit").on("click", function (e) {
e.preventDefault();
var result = form.valid();
if (result === true) {
var url = '/ControllerName/Customer_Save';
var data = form.serialize();
//send post request using jQuery Ajax
$.ajax({
url: url,
type: "post",
data: data,
success:function(msg){}
});
}
});
其中.btnCustomerSubmit
表示表单的提交按钮,这是一个常见的按钮,带有一个点击处理程序,发布请求显式发送
您可以尝试Automapper。AFAIK没有现成的Dictionary到Object映射,但在这里我找到了一个如何使用少量自定义代码实现这一点的示例:
http://automapper.codeplex.com/workitem/3266
我会这样做:
var queryString = HttpContext.Current.Request.QueryString;
var model = new Model
{
Firstname = queryString["Firstname"],
Lastname = queryString["Lastname"],
Middlename = queryString["Middlename"],
Avatar = queryString["Avatar"],
Birthday = queryString["Birthday"]
};
这比反射更快,也更可靠。如果有人将Model.Firstname重命名为Model.Firstname.