使用jquery将值发布回asp.net webform。我有一些代码可以很好地将发布的Form值粘贴到我的对象中,基本上它将表单值转换为我的类中每个属性的正确类型。
if (Request.Form.HasKeys())
{
foreach (var key in Request.Form.AllKeys)
{
PropertyInfo itemProperty = _CmsItem.GetType().GetProperty(key, BindingFlags.Public | BindingFlags.Instance);
var value = Request.Form[key];
if (itemProperty != null)
{
itemProperty.SetValue(_CmsItem, Convert.ChangeType(value, itemProperty.PropertyType), null);
}
}
// Doing some processing with my object
}
现在我遇到了如何处理像MyKeys = 123,13332,232323这样的字符串的困境 并将其放入我的对象中的数组或列表中。处理这种情况的最佳方法是什么?
澄清:我已经构建了页面来处理常规表单帖子以及基于requestmode标志的$ ajax回调帖子,因此可以根据不同的情况重新使用页面的页面/部分。
答案 0 :(得分:1)
以上面提供的格式解析列表的最简单方法是使用string.Split(...)
。
处理从JavaScript到服务器的列表和对象的理想方法是使用JSON。这对大多数开发人员来说是标准化和直观它还有一个额外的好处,就是可以使用通用API轻松解析ASP.NET。
在下面的示例中,我假设列表的值实际上是“[123,13332,232323]
”(没有引号)。这会将值转换为字符串数组。它使用JavaScriptSerializer
class进行JSON解析。此类要求您的项目引用System.Web.Extensions
DLL,它是.NET 3.5框架的一部分,但默认情况下并不总是包含在项目中。
using System.Web.Script.Serialization;
[...]
if (Request.Form.HasKeys())
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
foreach (var key in Request.Form.AllKeys)
{
var value = Request.Form[key];
var list = serializer.Deserialize<string[]>(value);
}
}
我刚刚使用其他类型测试了这个(除了string[]
),Deserialize<T>()
方法也会将对象转换为int[]
,List<string>
和{{ 1}},所以它非常动态,并且不需要花费很多精力来解析。