【发布时间】:2019-04-18 05:15:51
【问题描述】:
我想将请求更改为 GET 而不是 POST,以便用户可以共享生成的 URL。
当前系统使用普通的表单提交,并利用表单提交和自定义对象列表的 MVC ActionResult 之间的自动序列化。
例如
<form action="/MyPage">
<input type="hidden" id="MyThings_0__Value" name="MyThings[0].Value">
<input type="hidden" id="MyThings_0__Flag" name="MyThings[0].Flag">
<input type="hidden" id="MyThings_1__Value" name="MyThings[1].Value">
<input type="hidden" id="MyThings_1__Flag" name="MyThings[1].Flag">
</form>
但是这样做会导致生成的 GET 字符串过长和复杂。这很糟糕,因为MyThings 列表最多可以包含 10 个项目。
http://myurl.com/MyPage?MyThings%5B0%5D.Value=ThisIsValue1&MyThings%5B0%5D.Flag=1&MyThings%5B1%5D.Value=ThisIsValue2&MyThings%5B1%5D.Flag=2
我希望字符串看起来更加用户友好。比如:
http://myurl.com/MyPage?MyThings=ThisIsValue1-1,ThisIsValue2-2
这可以通过自定义序列化来完成吗?如果是这样,我将如何实施它?
我的模型和 ActionResult:
namespace MyNamespace {
public class MyThing {
public string Value { get; set; }
public int Flag { get; set; }
}
public class Filter {
public string CustomAttribute1 { get; set; }
public string CustomAttribute2 { get; set; }
public string CustomAttribute3 { get; set; }
public List<MyThing> MyThings { get; set; } = new List<MyThing>();
}
public ActionResult MyPage(Filter filter) {
MyModel model = StaticMethod.GetMyModel(filter);
return View(model);
}
}
【问题讨论】:
标签: list model-view-controller serialization get actionresult