2

我正在开发一个 mvc 4 应用程序,我即将完成。我遇到的唯一问题是在用户填写的多页表单的末尾,我想要一个显示他们输入的所有信息的摘要页面。我认为最简单的方法是通过使用部分视图来显示来自不同页面的表单数据,他们在其中输入了数据。从表单的页面到页面,传递一个 int 参数,该参数表示他们正在填写的表单的数据库中的 id 号(用户会提前通过电子邮件发送该 id,因为他们需要它来登录)。问题是,一旦表单完成并加载了摘要页面,主视图就会加载 id 参数(例如它的 mysite.com/vendor/quotesummary/22),但我不知道如何通过那个参数,到局部视图以加载正确的数据。所以这就是我的代码的样子:

在我的控制器中:

[HttpGet]
    public ActionResult QuoteSummary(int id = 0)
    {
        General_Info general_info = unitOfWork.General_Info_Repository.GetByID(id);
        return View(new QuotesViewModel(general_info));
    }

    [HttpGet]
    [ChildActionOnly]
    public ActionResult GenInfoSummary()
    {

        return View(new QuotesViewModel());
    }

    [HttpGet]
    [ChildActionOnly]
    public ActionResult QuoteDataSummary()
    {

        return View(new QuotesViewModel());
    }

然后在我的 QuoteSummary 视图中,我有:

@model SourceMvc.DAL.QuotesViewModel
@{
    ViewBag.Title = "QuoteSummary";
 }

<h2>Quote Summary</h2>

@Html.Partial("QuoteSummaryChildOne", new SourceMvc.DAL.QuotesViewModel());
@Html.Partial("QuoteSummaryChildTwo", new SourceMvc.DAL.QuotesViewModel());

就像我说的那样,我的 QuoteSummary 正在加载正确的 id 参数,即使在我可以将该参数传递给部分视图之前,这没有任何意义。

两天来我一直在试图解决这个问题,我觉得答案必须很简单,这就是为什么它如此令人沮丧。你们可以提供的任何帮助将不胜感激。

4

3 回答 3

4

您可以在要呈现部分视图的视图中放置一个动作吗

@Html.Action("GenInfoSummary","Home")

并让动作结果呈现这样的局部视图

[HttpGet]
[ChildActionOnly]
public ActionResult GenInfoSummary(int id = 0)
{

    return PartailView(new QuotesViewModel());
}
于 2013-03-22T13:27:16.937 回答
3
[HttpGet]
public ActionResult QuoteSummary(int id = 0)
{
    General_Info general_info = unitOfWork.General_Info_Repository.GetByID(id);
    return View(new QuotesViewModel(general_info));
}

[HttpGet]
[ChildActionOnly]
public ActionResult GenInfoSummary(int id = 0)
{

    return View(new QuotesViewModel(/* whatever info you need from id */));
}

[HttpGet]
[ChildActionOnly]
public ActionResult QuoteDataSummary(int id = 0)
{

    return View(new QuotesViewModel(/* whatever info you need from id */));
}

在您看来,假设您的 QuotesViewModel 具有 Id 属性

@model SourceMvc.DAL.QuotesViewModel
@{
    ViewBag.Title = "QuoteSummary";
 }

<h2>Quote Summary</h2>

@Html.Action("GenInfoSummary", Model.Id);
@Html.Action("QuoteDataSummary", Model.Id);
于 2013-03-22T13:23:19.357 回答
0

该值名称来自路由定义。这就是为什么你不能设置它,路由从 URL 中提取它并且该值优先。您的问题的解决方案是按照建议在操作中重置它,或者调整您的路由定义。

于 2013-03-22T19:27:34.197 回答