Пользовательская сериализация MVC параметра List <X>для запроса GET? - PullRequest
0 голосов
/ 18 апреля 2019

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

}
...