MVC部分视图和模型

本文关键字:模型 视图 MVC | 更新日期: 2023-09-27 18:26:26

我有一个HomeController,代码是:

public ActionResult Index()
{
    IndexModel m = new IndexModel();
    m.Test = "someString";
    m.LoginModel = new ViewLoginModel();
    m.LoginModel.Test = "FromLogin";
    return View("Login", m);
}

在我的Index.chtml中,我有这样的:

@model IndexModel
//bunch of HTML
@Html.Partial("_Login", Model.LoginModel)

在_Login.cshtml中,这是:

@model ViewLoginModel
//bunch of HTML
@Html.LabelFor(model => model.Test)

基本上,我想做的是在主页中为部分窗口(登录)创建一个单独的模型,这个模型可以是ViewIndexModel的子代,也可以不是(理想情况下,它甚至不应该存在)。我试图访问变量并在局部视图中写入/使用它们,但这不起作用,而是显示属性的名称。

在部分视图"_Login"中,intellisense也因某种原因不起作用(VS2013),尽管@Html.BeginForm等正在工作,但我无法访问模型的属性。

我做错了什么,我该怎么解决?

另外,这两者之间有区别吗?

@Html.Partial("~/Views/Home/_Login.cshtml")
@Html.Partial("Login")

当我使用#2时,似乎在我的HomeController中调用了"登录"功能,不确定为什么。。。

MVC部分视图和模型

之所以显示属性名称,是因为您使用了一个旨在显示属性名称的HTML助手。

@Html.LabelFor(model => model.Test)

要简单地输出模型中属性的值,可以使用以下语法

@model.Test

如果你想编辑它(假设它是一个字符串),那么把它包装在一个TextBoxFor助手中

@Html.TextBoxFor(model => model.Test)

至于您的第二个问题,我认为如果没有视图的完全限定名称,路由引擎就会参与其中。我还没有测试过这一点,通常使用完全限定的名称来从.NET获得额外的几毫秒的速度,而不必尝试猜测我想要的视图。