Новое в MVC и просто пытается получить данные моей формы из списка <>. В моем контроллере я могу правильно определить значение имени (имя рецепта), но не могу получить значение имени ингредиента, всегда возвращающееся как NULL?Формы бритвы со списками
Ниже приведены некоторые фрагменты кода из моего проекта.
МОДЕЛЬ
public class Recipe
{
[Required]
public string Name { get; set; }
public List<Ingredient> Ingredients { get; set; }
public Recipe()
{
Ingredients = new List<Ingredient>()
{
new Ingredient()
};
}
}
public class Ingredient
{
public string Name { get; set; }
}
VIEW
@using (Html.BeginForm("CreateEdit", "Recipe"))
{
@Html.ValidationSummary()
<div class="form-group">
@Html.LabelFor(x => x.Name, "Name")
@Html.TextBoxFor(x => x.Name, new { @class = "form-control" })
@Html.ValidationMessageFor(x => x.Name)
</div>
<h2>Ingredient(s)</h2>
<div class="form-group">
@Html.LabelFor(x => x.Ingredients.FirstOrDefault().Name, "Name")
@Html.TextBoxFor(x => x.Ingredients.FirstOrDefault().Name, new { @class = "form-control" })
</div>
<div class="form-group">
<input class="btn btn-primary" type="submit" text="submit" />
</div>
}
CONTROLLER
[HttpPost]
public ActionResult CreateEdit(Recipe recipe)
{
var recipeName = recipe.Name // <--- Works
var ingredientName = recipe.Ingredients.FirstOrDefault().Name; //<--- NULL value
return View(recipe);
}
Посмотрите на это: http://stackoverflow.com/a/23553225/3585278 – Danieboy
Вы не можете использовать '.FirstOrDefault()' в представлении - вам нужно использовать цикл 'for' или пользовательский' EditorTemplate' для «Ингредиент» - см. [этот ответ] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943). Но если вам нужен только один «Ингредиент», почему вы используете «Список'? –
@ Danieboy спасибо, что решила мою проблему – Sanchez89