使用paartail视图形成提交MVC 4时获取父视图的数据

时间:2016-06-21 12:46:59

标签: asp.net-mvc asp.net-mvc-4

我在父视图中创建了评论框作为添加评论的部分视图。下面是我的评论模型。

    [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方法相同。有人可以帮助我解决这个问题。

1 个答案:

答案 0 :(得分:0)

实际上,你设置的方式,除了帖子上的部分内容之外别无他法。发布返回部分视图的操作只能通过AJAX完成。如果你没有使用AJAX发布,那么你应该总是返回View,否则你将失去所有的布局。

也就是说,您需要退后一步,了解您正在开发的平台:Web。 Web在较低级别上运行HTTP协议和TCP / IP协议。重要的是,所有这些都是无国籍的。整个想法是创建一个网状网络,在这个网络中节点可以联机并在不关闭网络其余部分的情况下丢弃。要实现这一点,任何单个服务器都不能熟悉与特定客户端的通信,或者如果该服务器出现故障,则客户端将无法再恢复。

在更高级别,这会转换为每个请求都是一个独特的东西,不会被任何继续进行的请求所知。发布时,服务器端唯一存在的是您发布的内容。之前存在的变量早已消失。如果你在后期动作中再次需要一些价值,那么你需要将其与其他所有内容一起发布,或者在帖子之后的第一个位置重新运行任何逻辑。它不只是在那里等你。