У меня есть контроллер, который называют дважды от вызова 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
);
Это не имело никакого эффекта кроме создания более симпатично выглядящей ссылки.
Я не уверен, куда пойти отсюда.
Есть ли другая разметка, которая может случайно ссылаться на страницу? Ссылки на скрипты, ссылки на изображения, ссылки на css, все это может ошибочно указывать на '.' или текущую страницу.
Вы также можете попробовать изменить свой маршрут на этот.
routes.MapRoute(
"Play", // Route name
"Play/{id}", // URL with parameters
new { controller = "Play", action = "Index" , id = "" } // Parameter defaults
);
Вы можете просмотреть код в своем представлении. Пройдите через него и посмотрите, откуда приходит второй вызов.
Попробуйте изменить int? id
- int id
. Он соответствует маршруту второй раз, потому что вы снова вызываете индекс с нулевым идентификатором.