如何将模型传递到部分视图并加载特定记录?

时间:2014-02-19 18:33:11

标签: asp.net-mvc

我仍然是MVC的新手,我发现每一个新概念都是一场斗争,所以请原谅我,如果这是一个过于简单的概念,或者之前曾多次提出这个问题(我试图找到其他例子)。

我有几个模式可以使用jQuery的“对话框”从我的共享布局中调用。每个模态都只是一个DIV,其部分视图如下:

<div id="JoinDialog" title="Join the Contractor Network" style="display: none;">
    @Html.Partial("_JoinPartial")
</div>

并且这样称呼:

    $(".ClickToJoin").click(function () {
        $(function () {
            $("#JoinDialog").dialog({ width: "auto", height: "auto"});
        });
    });

我在布局中添加了“配置文件”模式,我希望将用户的数据插入到INPUT值中。为此,我假设我需要传入模型,并通过控制器加载我想要的数据。由于我目前在“共享”文件夹中有这个局部视图,我想我还需要将它移动到我的一个视图文件夹中,我可以将它附加到控制器上吗?

任何朝着正确方向的推动都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

  

由于我目前在“共享”文件夹中有这个局部视图,我   假设我还需要将它移动到我的一个视图文件夹中   可以将它附加到控制器?

不需要将局部视图移动到控制器文件夹。您可以使用共享文件夹本身的部分视图(View Engine也会查看Shared文件夹以查找匹配的视图)。这是示例 -

假设您有这样的模型 -

public class MyModel
{
    public string Name { get; set; }
}

然后你有一个动作从共享文件夹返回部分视图 -

    public ActionResult GetPartial()
    {
        MyModel model = new MyModel();
        model.Name = "Rami";
        return PartialView("TestPartial", model);
    }

然后在共享文件夹中显示部分视图 -

@model YouModelNamespace.MyModel
<div>@Model.Name</div>

然后在实际页面上,您可以拥有以下代码 -

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@{
    Html.RenderAction("GetPartial");
}

这将显示页面上部分视图的结果,如下面的屏幕截图所示。

enter image description here

答案 1 :(得分:0)

当您必须渲染视图(或部分视图)时,asp.net mvc有一些默认命令来查找它。第一个asp.net mvc将搜索您正在执行的控制器的相应视图文件夹,如果找不到,则在共享文件夹上搜索asp.net mvc。因此,如果您在_JoinPartial(示例)文件夹和共享文件夹上有一个名为Views/Product的视图,它将优先处理View文件夹。有时你会得到一个没有找到视图的异常,在那里你可以看到asp.net mvc找到它的所有地方的消息,样本:

enter image description here

在您的情况下,控制器可以返回部分视图

public ActionResult GetJoinPartial()
{
    return PartialView("_JoinPartial");
}

由于你有View文件夹,它会使用它,而是使用Shared文件夹中的partialView。