Как обновить вид с моделью - PullRequest
0 голосов
/ 22 января 2019

У меня есть форма с кучей полей, которые пользователь должен заполнить.В одной части есть текстовое поле, в котором пользователь вводит ссылочный номер и щелкает ссылку ниже, чтобы обновить представление, заполнив большинство заполненных полей.

@Html.ActionLink("Copy", "CopyFrom", "Logistics", "",new { onclick = "this.href += '&val=' + document.getElementById('ExistingRefNumber').value;" })

Вот код для CopyFrom ActionResult

        [HttpGet]
        public ActionResult CopyFrom(string val)
        {
            int id;
            if (int.TryParse(val, out id))
            {
                var fromModel = new LogisticsModels();
                fromModel = fromModel.GetLogisticsObject(id);

                if (fromModel != null)
                {
                    model = new LogisticsModels();
                    model = fromModel;
                    return View("Index", model);
                }
            }
            return null;
        }

Все это прекрасно работает, но я заметил, что URL в адресной строке изменился с

Views/Logistics/Index

на

Views/Logistics/CopyFrom&val=15551

Так что, когдапользователь нажимает кнопку «Отправить», возникает ошибка, поскольку он не может найти представление CopyFrom.

Что мне нужно сделать, чтобы это снова заработало?

РЕДАКТИРОВАТЬ 1 Я получил выше, чтобы работать.Вторая проблема, с которой я столкнулся, заключается в том, что в моей форме есть кнопка отправки, которая должна вызывать Index (модель LogisticsModel), но вместо этого она пытается найти Logistics / CopyFrom.Эта проблема возникает, только когда пользователь нажимает на ссылку «Копировать», как показано выше.Я не уверен, как явно вызвать Index ActionResult и передать модель..

1 Ответ

0 голосов
/ 22 января 2019

Я думаю, что проблема в CopyFrom&val=15551 - & должно быть ?. В HTTP-строке запроса URL-адреса ? обозначает начало строки запроса, за которым следует первый параметр и его значение. Последующие параметры затем отделяются от более ранних параметров с помощью &, но & недопустимо для начала строки запроса.

Например,

CopyFrom?firstParam=1&val=15551

будет правильным способом отправки двух параметров на сервер.

В вашем случае у вас есть только один параметр, так что вы надеетесь получить

CopyFrom?val=15551

, который требует только изменения кода

"this.href += '&val='

до

"this.href += '?val='

И с тобой все будет в порядке. (N.B. URL все равно изменится на CopyFrom, но для представления ответа будет использован код представления «Индекс», что вполне нормально.)

Если вы отладите свой код на стороне сервера, вы обнаружите, что результатом вашей ошибки является то, что val всегда является null в C #, потому что .NET не может правильно прочитать параметр из строки запроса (потому что, как я объяснил, строка запроса недействительна). Это, в свою очередь, приведет к сбою TryParse, и поэтому метод действия вернет null вместо представления «Index».


P.S. на самом деле вы никогда не должны возвращать null из метода действия - правильный способ справиться с этим - вернуть представление, но с отображением сообщения об ошибке - либо из-за ошибки состояния модели, либо из-за некоторых пользовательских вещей в ViewBag, либо даже перенаправления на общую страницу ошибки (если проблема не устраняется). Вы уже сможете найти множество примеров такого рода вещей в Интернете. Но вы всегда должны возвращать что-то в браузер - ведь вы когда-нибудь слышали о веб-странице, которая просто пропадает без объяснения причин, если вы делаете тривиальную ошибку?

...