我在父视图中创建了评论框作为添加评论的部分视图。下面是我的评论模型。
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CMT_ID { get; set; }
private DateTime _date = DateTime.Now;
public DateTime cmd_ad
{
get { return _date; }
set { _date = value; }
}
public string cmd_content { get; set; }
public string t_email { get; set; }
public Nullable<int> SPID { get; set; }
public virtual service_provider service_provider { get; set; }
从partail View我必须提交cmd_content,t_email和SPID.Below是partail视图。
@using (Html.BeginForm("AddComment", "Food")){
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<table>
<tr><td></td> <td>@Html.TextAreaFor(model => model.cmd_content)</td></tr>
<tr><td>Email</td><td>@Html.EditorFor(model => model.t_email)</td></tr>
<tr><td></td> <td>@Html.ValidationMessageFor(model => model.t_email)</td</tr></table><p><input type="submit" value="Comment" class="btn btn-success" /></p>}
我已经创建了从partail View提交数据的操作方法。操作方法父视图的详细信息方法View.AddComment是_Comment partail的Action方法View.Below是我的Controller方法。
public ActionResult Details(int id = 0)
{
ImageData details = new ImageData();
var sp_details = (from s in db.service_provider
join p in db.pictures on s.SPID equals p.SPID
join c in db.cities on s.City_ID equals c.City_ID
where s.SPID == id
select new ImageData()
{
Sp_name = s.Sp_name,
SPID = s.SPID,
pic = p.pic
});
return View(sp_details);
}
public ActionResult AddComment()
{
return PartialView("_Comment");
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddComment(comment cmt)
{
if (ModelState.IsValid)
{
db.comments.Add(cmt);
db.SaveChanges();
return RedirectToAction("Details", "Food");
}
return PartialView("_Comment", cmt);
}
当有人添加评论部分视图时,应提交cmt_content,t_emil,SPID。我的问题是如何从父视图中获取SPID。它与参数传递给Details Action方法相同。有人可以帮助我解决这个问题。
答案 0 :(得分:0)
实际上,你设置的方式,除了帖子上的部分内容之外别无他法。发布返回部分视图的操作只能通过AJAX完成。如果你没有使用AJAX发布,那么你应该总是返回View
,否则你将失去所有的布局。
也就是说,您需要退后一步,了解您正在开发的平台:Web。 Web在较低级别上运行HTTP协议和TCP / IP协议。重要的是,所有这些都是无国籍的。整个想法是创建一个网状网络,在这个网络中节点可以联机并在不关闭网络其余部分的情况下丢弃。要实现这一点,任何单个服务器都不能熟悉与特定客户端的通信,或者如果该服务器出现故障,则客户端将无法再恢复。
在更高级别,这会转换为每个请求都是一个独特的东西,不会被任何继续进行的请求所知。发布时,服务器端唯一存在的是您发布的内容。之前存在的变量早已消失。如果你在后期动作中再次需要一些价值,那么你需要将其与其他所有内容一起发布,或者在帖子之后的第一个位置重新运行任何逻辑。它不只是在那里等你。