gpt4 book ai didi

asp.net-mvc - 无法获取局部 View cshtml 的 ViewModel

转载 作者:行者123 更新时间:2023-12-04 18:21:10 25 4
gpt4 key购买 nike

我在索引页上有一个 PartialView,如下所示:-

@{ Html.RenderPartial("ImageUpload"); }

并且 PartialView 看起来像这样:-

@model MvcCommons.ViewModels.ImageModel

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.FileName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
</tr>
}
</table>

现在根据 PartialView 顶部的声明,它应该进入 ViewModels.ImageModel 内部,并且在该类内部我有一个构造函数:-

public ImageModel()
{
XDocument imageMetaData = XDocument.Load(uploadsDir + @"/ImagesMetaData.xml");
var images = from image in imageMetaData.Descendants("image")
select new Image(image.Element("filename").Value,
image.Element("description").Value);
this.AddRange(images.ToList<Image>());
}

但是,由于某种原因,在 ImageUpload 局部 View 中,当我调试时,我没有被重定向到这个 ViewModel 构造函数,因此 PartialView 中的模型为空。

我是不是漏掉了什么?

如何让它真正通过我的构造函数?我还需要在主索引页面(托管 PartialView 的地方)中执行 @model 吗?

感谢您的帮助和时间

最佳答案

@model MvcCommons.ViewModels.ImageModel 用于声明强类型模型,但不实例化它。

你应该使用

@{ Html.RenderPartial("ImageUpload", <yourmodel>); }

或更简单:

@Html.Partial("ImageUpload", <yourmodel>)

顺便说一句,在你的情况下:

@Html.Partial("ImageUpload", new ImageModel())

但要小心:您的模型应该少构造函数,而不是加载/解析 XML。这应该在 Controller 中完成(并在缓存系统中设置?)。

如果您希望减少主视图模型,您还可以创建一个带有属性 ChildActionOnly 的 Action 用于部分渲染,并使用 @Html.Action(...) 调用它:它创建了一个新的 ControllerContext。

关于asp.net-mvc - 无法获取局部 View cshtml 的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10848220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com