У меня есть вид с названием «Детали», который содержит частичный вид «PostReply». Я пытаюсь передать представление Id из представления Details в действие PostReply Controller.Передача значения Id в частичный вид
Я пробовал это в подробном представлении, но он толкает нулевое значение id.
@Html.Partial("PostReply", new XXXXX.Models.Reply{ QuestionId = Model.Question.ID })
Затем я попытался добавить значение идентификатора для BeginForm в PostReply (Partial View), как это:
Html.BeginForm("PostReply", "Question", new { id = Model.Question.ID}))
Это также не работает. Как я могу получить значение id из деталей в PostReply? Заранее спасибо.
Детали Вид:
@model XXXXXX.Models.ParentView.Questions
....
@Html.DisplayNameFor(model => model.QuestionModel.Title)
@Html.DisplayNameFor(model => model.QuestionModel.Desc)
....
@Html.ActionLink("Edit", "Edit", new { id = Model.QuestionModel.ID }) |
@Html.ActionLink("Back to List", "Index")
....
@Html.Partial("PostReply", new Chemtalks.Models.Reply())
PostReply (Частичный вид):
@model XXXXX.Models.Reply
@using (Html.BeginForm("PostReply", "Question", FormMethod.Post))
{
@Html.LabelFor(model => model.ReplyText)
@Html.EditorFor(model => model.ReplyText)
@Html.ValidationMessageFor(model => model.ReplyText
<input type="submit" value="Create" class="btn btn-default" />
}
Детали & PostReply Контроллеры:
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var model = new ParentView.Questions
{
QuestionModel = db.QuestionModels.Find(id),
Reply = db.Replies.Where(t => t.QuestionId == id)
};
if (model == null)
{
return HttpNotFound();
}
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult PostReply([Bind(Include = "ReplyID, ReplyText, UserID, QuestionId")] Reply reply, int? id)
{
try
{
if (ModelState.IsValid)
{
reply.QuestionId = id;
reply.UserID = User.Identity.GetUserId();
db.Replies.Add(reply);
db.SaveChanges();
}
}
catch (DataException)
{
ModelState.AddModelError("", "Unable to post your reply. Please try again later.");
}
return PartialView(reply);
}
QuestionModel:
public class QuestionModels
{
public int ID { get; set; }
public string Title { get; set; }
public string Desc { get; set; }
public string UserID { get; set; }
[ForeignKey("QuestionId")]
public virtual ICollection<Reply> Replies { get; set; }
}
public class Reply
{
public int ReplyID { get; set; }
public string ReplyText { get; set; }
public string UserID { get; set; }
public int? QuestionId { get; set; }
public virtual QuestionModels QuestionsModels { get; set; }
}
ParentView Модель:
public class ParentView
{
public class Questions
{
public QuestionModels QuestionModel { get; set; }
public IEnumerable<Reply> Reply { get; set; }
}
}
Вы не показали свои модели, но 'новый XXXXX.Models.Reply {QuestionID = Model.Question.ID})' 'означает Reply' содержит свойство с именем' QuestionId', так что я предполагаю, ваш хочу 'new {id = Model.QuestionId}' в вашей форме (а не 'Model.Question.ID', который скорее всего вызовет исключение NullReferenceException) –
Я также добавил модели. QuestionId - это внешний ключ в таблице Reply и я пытаюсь заполнить его идентификатором таблицы Questionmodel. – ashhad
Позвольте мне сначала отредактировать и удалить все ненужные коды. –