2015-10-06 3 views
0

Я столкнулся с тем, что, по-видимому, является несогласованностью в MVC 5 относительно Html.Actionlink. В разных файлах cshtml я могу использовать один и тот же код, но создаваемая цель URL-адреса различна.MVC Action Link Issue

Например, эта строка кода:

<td>@Html.ActionLink(item.Description, "Edit", new { item.ParentTableID }) </td>

генерирует этот URL

localhost\MyControllerClass\Edit?ParentTableID=35

Что тогда правильно называет метод ActionView Edit и питающую параметр с 35, как и ожидалось.

Однако в другом файле cshtml, этой линии

<td>@Html.ActionLink("Edit", "EditChild", new { id = f.ApplicationTableFieldID})</td>

производит этот URL

localhost/MyControllerClass/Edit/7

и когда он попадает в EditChild Action View, параметр является недействительным.

Я видел это сейчас пару раз и еще не смог понять, в чем разница. Но мне нужен первый результат.

Спасибо.

+0

Не знаю, что я знаю андер, но в каждой из ваших ссылок действий для параметров вы указываете 'id' = f.ApplicationTableFieldID, а в другом - только item.ParentTableID. Вы пробовали сделать их одинаковыми? С точки зрения наличия '@ Html.ActionLink (« Edit »,« EditChild », new {f.ApplicationTableFieldID})' –

ответ

1

Убедитесь, что параметры вашего ИД правильно указаны как в методе действий, так и в помощнике ActionLink Html. Визуальная разница происходит от MVC по умолчанию маршрутизации и как он может принимать параметр с именем ID и поместить его в URL без строки запроса (? А затем материал)

Если ваш метод действия выглядит следующим образом

public ActionResult EditChild(int ParentTableID){} 

Затем вам нужно будет иметь свой параметр ID с именем ParentTableID, когда вы передаете его обратно в URL

<td>@Html.ActionLink("Edit", "EditChild", new { ParentTableID = f.ApplicationTableFieldID})</td> 

теперь должен произвести следующий URL

localhost\MyControllerClass\EditChild?ParentTableID=3 
+0

Если он принимает только один параметр, нужно ли указывать имя параметра при вызове действия? (Не критика, законный запрос) –

+0

@ jaredlee.exe - это зависит от того, как настроены ваши маршруты. по умолчанию «id» не нужно указывать, но если ваше имя параметра «ParentTableID», вам нужно его указать. – Ric

+0

Да - так работает модельное связующее. Имена параметров должны совпадать с тем, что ожидает метод действия. То же самое справедливо, если вы передадите всю модель представления в методе post, каждое свойство должно соответствовать имени или значение не будет привязано к этому параметру/свойству. – Tommy