【问题标题】:MVC presistent ModelMVC 持久模型
【发布时间】:2012-03-03 01:52:45
【问题描述】:

在 MVC 3 应用程序中,由于某些文件夹创建逻辑,我需要能够将创建视图分成 2 个不同的部分。在第一个视图中,我有一个带有项目名称的文本框,单击下一步按钮时,我需要创建文件夹对于那个项目,我需要一种方法来以某种方式在我的下一个视图中获取该项目名称文件夹。现在我按下下一步,我失去了项目名称,我不能再得到它。 在互联网上有很多地方以相同的方式实现它,但我不知道如何做到这一点。

关于如何保存模型的任何解决方案?

【问题讨论】:

    标签: c# javascript asp.net-mvc asp.net-mvc-3 model-view-controller


    【解决方案1】:

    您可以在第二个视图中使用隐藏字段,该字段将包含在第一个视图中输入的项目名称。这样,当您提交第二个表单时,您将获得项目名称和项目文件夹。

    另一种可能性是将在第一个视图中输入的值存储在服务器某处(数据库、会话...)


    更新:

    作为 cmets 部分的请求,这里是一个使用隐藏字段的示例。

    第一个视图:

    @model FirstStepViewModel
    @using (Html.BeginForm())
    {
        @Html.EditorFor(x => x.ProjectName)
        <button type="submit">OK</button>
    }
    

    然后是这个第一步将被提交到的控制器操作:

    [HttpPost]
    public ActionResult Foo(FirstStepViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
    
        return RedirectToAction("Bar", new { projectname = model.ProjectName });
    }
    

    然后您将拥有第二个控制器操作,该操作将为第二个视图提供服务:

    public ActionResult Bar(FirstStepViewModel firstStep)
    {
        var model = new SecondStepViewModel
        {
            ProjectName = firstStep.ProjectName
        };
        return View(model);
    }
    

    然后你就会有一个对应的视图:

    @model SecondStepViewModel
    @using (Html.BeginForm())
    {
        @Html.HiddenFor(x => x.ProjectName)
        @Html.EditorFor(x => x.ProjectFolder)
        <button type="submit">OK</button>
    }
    

    将发布到最终操作:

    [HttpPost]
    public ActionResult Bar(SecondStepViewModel model)
    {
        // here you will get both model.ProjectName and model.ProjectFolder
        ...
    }
    

    【讨论】:

    • 你能举个例子吗?如何将项目名称发送到 Hiddenfield?
    【解决方案2】:

    您也可以一次加载表单的所有部分,然后使用选项卡式布局(例如,jQuery UI Tabs)并在最后一步提交整个表单。

    【讨论】:

    • 当然如果每一步和大量字段,这可能会导致一个很大的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多