Я пытаюсь разрешить пользователю просматривать пиво.Учитывая базовые модели:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Beer
{
public int Id { get; set; }
public string Name { get; set; }
}
public class BeerReview
{
public int Id { get; set; }
public virtual Beer { get; set; }
public virtual User { get; set; }
public string Review { get; set; }
}
У меня также есть модель представления:
public class BeerReviewViewModel
{
public BeerReview Review { get; set; }
...
}
У меня есть следующие действия контроллера:
public ActionResult Review(int id)
{
var beer = // get beer by Id
BeerReviewViewModel model = new BeerReviewViewModel
{
BeerReview = new BeerReview
{
Beer = beer.First()
}
};
return View("Review", model);
}
[HttpPost]
public ActionResult Review(BeerReviewViewModel submission)
{
if(ModelState.IsValid)
{
// here is the problem
int id = submission.Review.Beer.Id;
}
}
На мой взгляд, я предоставляю пользователю простую форму для обзора пива.Вид выглядит следующим образом:
@model MyNamespace.BeerReviewViewModel
<h2>Review Beer: @Model.Review.Beer.Name</h2>
@{
using(Html.BeginForm()){
<div>
@Html.TextAreaFor(b => b.Model.Review.Review)
</div>
<div>
<input type="submit" value="Post Review" />
</div>
}
}
Очевидно, что я ничего не отправляю о самом пиве в контроллер, поэтому объект Beer в BeerReviewViewModel всегда равен нулю.Мне интересно, если у меня уже есть объект Beer в представлении до отправки формы, есть ли способ сообщить форме отправить эти данные вместе с POST.Я попытался использовать Bind [Prefix = "b"] на контроллере, но безуспешно.Я полагаю, что я всегда мог просто добавить int к BeerReviewViewModel и отправить скрытое значение идентификатора пива из представления в контроллер (или отправить скрытое значение для каждого свойства пива).Но опять же, это все еще кажется хакерским для меня.Любой совет будет оценен.