2016-06-19 2 views
0

У меня есть model название с атрибутом PostID и еще model, называемое столбом. В списке view, когда пользователь нажимает на пост, чтобы добавить изображения к нему, он передает PostID через HtmlActionLinkкак передать идентификатор контроллеру в mvc

@Html.ActionLink("Add Images", "AddImages", new { id = item.PostID })

Он отлично работает, но мне нужно сохранить, что PostId в образе Model как Что ж.

public ActionResult AddImages(int id) 
    { 
     ImageViewModel images = new ImageViewModel(); 
     images.PostID = id;   
     return View(images); 
    } 
    [HttpPost] 
    public ActionResult AddImages(ImageViewModel image, HttpPostedFileBase images) 
    {    
     Image newImage = new Image(); 
     newImage.PostID = image.PostID; 
     return View("Index"); 
    } 

Таким образом, он не будет работать, если она сохраняет значение PostID 0. Я также попытался с помощью ViewBag, но не везло до сих пор. В AddImages View нет TextBoxFor или что-либо для атрибута PostID, так как он не должен быть установлен или замечен пользователями.

+0

Создайте вход для представления идентификатора модели. Обычно скрытый ввод. – Nkosi

+0

Если вы переименуете свое свойство модели просмотра в 'ID' вместо' PostID', то вам не нужно ничего делать - он будет добавлен как значение маршрута в атрибуте 'action' форм (без' HiddenFor() 'is требуется в представлении) –

ответ

4

Для того, чтобы получить PostID в действии HttpPost, вы должны добавить поле ввода для PostId в виде отображения вида тега.

@Html.HiddenFor(m=>Model.PostId) 
+1

Этот метод безопасен или лучший способ сделать это? – Sugafree

+0

По моему мнению, это самый простой способ – Mehmet

1

Да, PostID не задан пользователем, но его по-прежнему необходимо положить в <form>, так что это будет обратная передача на сервер в HttpPost. Обычно мы используем для этого hidden field. Некоторые вещи, как:

<form> 
    @Html.HiddenFor(m => Model.PostID) 

    <!-- Other fields here --> 
</form> 
Смежные вопросы