2016-03-16 3 views
1

У меня проблема с передачей параметра в контроллере.ASP.NET MVC передает параметр контроллеру с аргументом

я получаю id значение в public ActionResult AddIngridient(int id = 0) и мне нужно, чтобы передать его в public ActionResult AddIngridient(Ingredients ingridients) как IngredientID. Как это сделать?

У меня есть модель:

public partial class Ingredients 
{ 
    public int IngredientID { get; set; } 
    public Nullable<int> AmountID { get; set; } 
    public Nullable<int> IngredientTypeID { get; set; } 
} 

и контроллеры:

public ActionResult AddIngridient(int id = 0) 
    { 
     IEnumerable<Ingredient> ListOfIngridient = FRE.Ingredient.Select(key => key).ToList(); 
     ViewBag.IngridientsList = new SelectList(ListOfIngridient,"IngredientID", "IngredientName"); 

     IEnumerable<Amount> ListOfAmounts = FRE.Amount.Select(key => key).ToList(); 
     ViewBag.AmountsList = new SelectList(ListOfAmounts, "AmountID", "AmountName"); 

     ViewBag.ID = id; 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult AddIngridient(Ingredients ingridients) 
    { 
     return View(); 
    } 

Просмотр выглядит следующим образом:

@model FoodRecipes.Models.Ingredients 
@{ 
ViewBag.Title = "AddIngridient"; 
} 

<h2>AddIngridient</h2> 
@using(Html.BeginForm()) 
{ 
@Html.DropDownListFor(model => model.IngredientTypeID, (SelectList)ViewBag.IngridientsList) 
<br /> 
@Html.DropDownListFor(model => model.AmountID, (SelectList)ViewBag.AmountsList) 
<input type="submit" value="Create" /> 
} 
+0

вы пытались установить действие, которое нужно после? например: @using (Html.BeginForm («AddIngridient», «YourControllerName»)) –

+0

@RicardoPontual это необходимо только тогда, когда вы хотите перейти на другой контроллер за пределами текущего маршрута. И, абсолютно, не представляют проблемы в контексте этого вопроса. – Balde

ответ

1

Вы должны использовать @Html.HiddenFor() помощника.

В вашем случае:

@using(Html.BeginForm("AddIngridient","YourControllerName")) 
{ 
    @Html.HiddenFor(x => x.IngredientID) //this line 
    @Html.DropDownListFor(model => model.IngredientTypeID, (SelectList)ViewBag.IngridientsList) 
    <br /> 
    @Html.DropDownListFor(model => model.AmountID, (SelectList)ViewBag.AmountsList) 
    <input type="submit" value="Create" /> 
} 

Он будет производить input тип hidden с именем IngredientID, который будет передан на сервер в виде POST.

+0

Если ViewBag.ID = id, укажите значение, которое нужно поместить в model.IngridientID, возможно, это должно быть что-то вроде @ Html.HiddenFor (model => ViewBag.ID) – A191919

+0

@ A191919 нет, лучше установить его в ingridientid свойство модели в контроллере. Это путь mvc –

+2

@ A191919 Правильный помощник: @ Html.Hidden («IngedientID», ViewBag.ID). Но мой ответ объясняет правильный способ работы с моделями, учитывая, что вы можете добавить больше свойств в свою модель, и плохой практикой является заполнение ViewBag свойствами модели. – Balde

1

Вы должны изменить свой код AddIngredient действий, чтобы вернуть модель:

public ActionResult AddIngridient(int id = 0) 
{ 
    IEnumerable<Ingredient> ListOfIngridient = FRE.Ingredient.Select(key => key).ToList(); 
    ViewBag.IngridientsList = new SelectList(ListOfIngridient,"IngredientID", "IngredientName"); 

    IEnumerable<Amount> ListOfAmounts = FRE.Amount.Select(key => key).ToList(); 
    ViewBag.AmountsList = new SelectList(ListOfAmounts, "AmountID", "AmountName"); 

    return View(new Ingredients { IngredientID = id }); 
} 

А на ваш взгляд, добавить тип ввода скрытых:

@using(Html.BeginForm()) 
{ 
    @Html.HiddenFor(model => model.IngredientID) 
    @Html.DropDownListFor(model => model.IngredientTypeID, (SelectList)ViewBag.IngridientsList) 
    <br /> 
    @Html.DropDownListFor(model => model.AmountID, (SelectList)ViewBag.AmountsList) 
    <input type="submit" value="Create" /> 
} 
Смежные вопросы