Одно и то же имя поля в разных видах отображается неправильно - PullRequest
2 голосов
/ 16 марта 2012

Я новичок в MVC 3, и у меня есть следующие представления:

Индекс:

@using (Html.BeginForm())
{
    @Html.Hidden("id", "1")
    <input type="submit" value="Submit" />
}

Main:

@using (Html.BeginForm())
{
    @Html.Hidden("id", "2")
    <input type="submit" value="Save" />
}

И следующий контроллер:

public ActionResult Index()
{
    ViewBag.Message = "Welcome!";
    return View();
}
[HttpPost]
public ActionResult Index(string id)
{
    if ("1".Equals(id))
    {
        return View("Main");
    }
    else("2".Equals(id))
    {
        return View();
    }
}

Я ожидал бы, что в главном представлении будет отображаться скрытый ввод со значением "2". Однако при достижении главной страницы и проверке источника значение все равно устанавливается на «1». Есть идеи, что я тут делаю не так?

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Это зависит от того, какой URL вы используете. Если вы вводите ..../Index, то он перейдет в представление «Индекс», но если вы перейдете к .../Index/1, тогда он перейдет в главное представление и отобразит ваши два (что довольно странно, поскольку 1 переходит в 2 :))

Кроме того, вы нажмете Index(string id) метод только на POST, так что это также может быть вашей проблемой. типичный запрос URL выглядит как GET

Если это не поможет, возможно, вам потребуется предоставить более подробную информацию (по какому URL вы пытаетесь перейти, и как вы пытаетесь туда попасть)

ОБНОВЛЕНИЕ ПОСЛЕ ПОПЫТКИ ЭТОГО СЕБЯ

Я понимаю, что вы говорите. Причина, по которой скрытое поле имеет значение 1, заключается в том, что ModelState подключает его для вас. Насколько я могу сказать, это не должно происходить, так как вы явно устанавливаете значение. Однако, похоже, что если есть соответствующий элемент состояния, он будет использовать его вместо этого. Вы можете проверить это, перейдя от использования id к чему-либо еще в скрытом вводимом имени вашего Main.

Вот документация . В комментариях говорится, что это больше предназначено для привязки модели, но я бы подумал, что введенное значение переопределит все остальное.

ФИНАЛЬНОЕ ОБНОВЛЕНИЕ

Оказывается, это на самом деле уже доведено до соответствующего человека, и это сделано по замыслу. Они ДОЛЖНЫ изменить документацию, чтобы сделать это более явным. Вот ТАК вопрос, который отвечает на этот вопрос

0 голосов
/ 16 марта 2012

Не забудьте, что механизм маршрутизации по умолчанию настроен на обработку третьего сегмента как идентификатора. Если я не ошибаюсь, параметр route победит параметр формы так:

Дело 1:

URL: controller/index/
HIDDEN_ID: 1
= Action id parameter = 1 //from the hidden field

Случай 2:

URL: controller/index/2
HIDDEN_ID: 1
= action id parameter = 2 //from the url route not te hidden field
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...