Я хочу изменить запрос на 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);
}
}