Добрый день.
В проекте ASP.MVC столкнулся с поведением, которое смог обойти, но не могу объяснить.
Суть вопроса: форма в представлении отправляет в контроллер массив из двух string
. Метод контроллера должен пробросить этот массив в другой контроллер, где его есть кому обработать. И пробросить массив я не смог - вместо массива
в параметры второго контроллера приходит только имя типа.
Вопрос почему так происходит? Это нормальное поведение или я сто-то сделал не так?
Код (сначала - работающая версия): Представление (валидаторы выкинул, но следы от них остались в параметрах):
@using (Html.BeginForm("Submit", "Home", FormMethod.Post, new { novalidate = "", name = "InputForm", ng_controller = "SubmitCtrl", role = "form" }))
{
<div class="form-group">
@Html.Label("Введите адрес сайта в поле ввода и нажмите кнопку")
@Html.TextBox(
"Url0",
null,
new { type = "url", @class = "form-control", required = "", placeholder = "Enter url here", id = "url11", ng_model = "url1" })
<div>
@Html.Label("Выберите количество запросов к странице сайта")
@Html.DropDownList("Url0", new SelectList(new string[] { "4", "5", "6", "7" }), new { @class = "form-control"})
</div>
</div>
<button type="submit" class="btn btn-primary" ng-click="Press()" ng-disabled="InputForm.$invalid">Отправить</button>
<div ng-show="pressed">
<img src="~/Content/Image/please_wait.gif" />
</div>
}
Контроллер, принимающий данные из представления и пробрасывающий их в другой контроллер (лишние блоки удалены).
[HttpPost]
public ActionResult Submit(string [] Url0)
{
return RedirectToAction("Index", "Tool", new {url= Url0[0], attempts=Url0[1]});
}
Контроллер, обрабатывающий данные:
public ActionResult Index(string url, string attempts)
{
manager = new VMManager();
int att;
if (Int32.TryParse(attempts, out att)) manager.AttemptsQuantiy = att;
manager.VM = (SiteVM)manager.ParseUrl(url);
if (manager.VM.PageResults.Count == 0) return RedirectToAction("Error", "Home", null);
else return RedirectToAction("ShowResult", "Tool", null);
}
Нерабочий код:
public ActionResult Index(string[] url)
в методе Submit
:
return RedirectToAction("Index", "Tool", new {url= Url0});
или
return RedirectToAction("Index", "Tool", url= new string [] {Url0[0],Url0[1]});
Это нормальное поведение, т.к. нельзя отправлять сложные объекты при редиректе. Когда ты делаешь редирект, ты отправляешь запрос типа GET на свой метод. А соответственно при отправке GET запроса необходимо отправить всю информацию в качестве параметров строки запроса. И это работает только с простыми скалярными свойствами.
Имеется код, который нормально работает в WinForms, но хочется перенести его в WPF
Пытаюсь получить ключ продукта windows, на win 7 работает нормально, но на других осях не показывает
Поставил VS2017 pro, обнаружил, что не работает кнопка опубликовать, те