我填写了表单,并在服务器上收到了这样的数据:
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; }
有没有办法让它变得更容易并将这些线组合在一起?
答案 0 :(得分:3)
您可以编写扩展方法并使用反射来设置属性,如下所示:
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
的属性名称完全匹配。
答案 1 :(得分:0)
如果您使用的是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
表示表单的提交按钮,就是这样,它是常用按钮,带有单击处理程序并且明确发送了发布请求
答案 2 :(得分:0)
您可以尝试Automapper。 AFAIK它没有开箱即用的字典到对象的映射,但是在这里我找到了一个例子,如何用很少的自定义代码来做到这一点:
答案 3 :(得分:0)
我会这样做:
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 ,它就不会开始失败(或默默跳过项目)。