2015-05-14 1 views
1

Мне нужно передать идентификатор для моего ресурса как часть URL. Есть ли способ, которым я могу иметь ссылку, отформатированную как this/users/edit/10, с помощью помощника тега?TagHelper для передачи значений маршрута как часть ссылки с этим форматом/users/edit/10

Я видел следующий пример по другому вопросу, но это дает мне имя пользователя/edit? Id = 10 & foo = bar. Не совсем то, что я ищу. :(

<a asp-action="Edit" asp-route-id="10" asp-route-foo="bar">Edit</a> 

Ниже фактическая функция, которую я пытаюсь достичь:

[HttpGet] 
[Route("[controller]/edit/{blogId:int}")] 
public IActionResult BlogEdit(int blogId) 
{ 

    Blog blog = _blogRepo.GetById(blogId); 

    BlogEditViewModel blogEditViewModel = new BlogEditViewModel 
    { 
     Title = blog.Title, 
     Body = blog.Body, 
     Id = blog.Id 
    }; 

    ViewBag.Title = "Edit Blog"; 
    return View(blogEditViewModel); 
} 

Я попытался с помощью ниже тег, но он по-прежнему генерировать неправильную ссылку

<a asp-controller="Blog" asp-action="BlogEdit" asp-route-blogId="11">Edit Blog 11</a> 
.

Вышеуказанная ссылка создает путь ниже.

http://localhost:52409/Blog/edit?blogId=11 

Спасибо!

+0

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

+0

Я использую маршрутизацию атрибутов. Это определение для моего маршрута: [Маршрут («[контроллер]/редактировать/{blogId: INT}»)] – Zorthgo

ответ

0

На основе вашего комментария, измените атрибут атрибута helper от asp-route-id до asp-route-blogid, и все должно сработать.

+0

Я попытался с помощью 'Edit Blog 11' , как Вы предложили, но он по-прежнему не создает ссылку в правильный формат. 'http: // localhost: 52409/Блог/изменить? BlogId = 11' – Zorthgo

1

Учитывая сложность Attribute-based маршруты могли иметь, это довольно трудно придумать способ, чтобы иметь taghelper вынести ссылку как /blog/edit/11.

Если приведенная выше ссылка соответствует стандарту , то это становится довольно легко воспроизвести по желанию; но здесь не так.

Итак, что делать? Названные Маршруты

Если вы должны были определить свою функцию, как так:

HttpGet] 
[Route("[controller]/edit/{blogId:int}", Name = "BlogEdit")] 
public IActionResult BlogEdit(int blogId) 
{ 
    ... 
} 

Затем вы можете определить связь TagHelper следующим образом тоже:

<a asp-route="BlogEdit" asp-route-blogId="11">Edit Blog 11</a> 

Который должен оказать следующую ссылку:

<a href="/blog/edit/11">Edit Blog 11</a>