Контроллер MVC называют дважды

У меня есть контроллер, который называют дважды от вызова ActionLink.

Моя домашняя страница имеет ссылку, что когда нажатые вызовы Индексный метод на контроллере Игры. Идентификатор 100 передается в метод. Я думаю, что это - то, что вызывает проблему. Больше на этом ниже.

Вот некоторые фрагменты кода:

Главная страница:

<%= Html.ActionLink("Click Me", "Index", "Play", new { id = 100 }, null) %>

Контроллер игры:

public ActionResult Index(int? id)
{
    var settings = new Dictionary<string, string>();
    settings.Add("Id", id.ToString());
    ViewData["InitParams"] = settings.ToInitParams();
    return View();
}

Представление Play:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

(html <head> omitted for brevity)

<body>
    <form id="form1" runat="server" style="height:100%">
        Hello
    </form>
</body>

Если я избавляюсь от параметра к Индексному методу, все прекрасно. Если я оставляю параметр на месте, то Индексный метод называют с 100 как идентификатор. После возврата Представления метод называют во второй раз с параметром пустого указателя.

Я, может казаться, не выясняю то, что инициировало второй вызов.

Моя первая мысль состояла в том, чтобы добавить определенный маршрут как это:

routes.MapRoute(
    "Play", // Route name
    "Play/{id}", // URL with parameters
    new {controller = "Play", action = "Index"} // Parameter defaults
);

Это не имело никакого эффекта кроме создания более симпатично выглядящей ссылки.

Я не уверен, куда пойти отсюда.

33
задан CarenRose 6 March 2019 в 19:20
поделиться

4 ответа

Есть ли другая разметка, которая может случайно ссылаться на страницу? Ссылки на скрипты, ссылки на изображения, ссылки на css, все это может ошибочно указывать на '.' или текущую страницу.

63
ответ дан 27 November 2019 в 17:52
поделиться

Вы также можете попробовать изменить свой маршрут на этот.

routes.MapRoute( 
    "Play", // Route name 
    "Play/{id}", // URL with parameters 
    new { controller = "Play", action = "Index" , id = "" } // Parameter defaults 
);
1
ответ дан 27 November 2019 в 17:52
поделиться

Вы можете просмотреть код в своем представлении. Пройдите через него и посмотрите, откуда приходит второй вызов.

3
ответ дан 27 November 2019 в 17:52
поделиться

Попробуйте изменить int? id - int id . Он соответствует маршруту второй раз, потому что вы снова вызываете индекс с нулевым идентификатором.

1
ответ дан 27 November 2019 в 17:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: