asp.net-mvc-3 - MVC3 强类型局部 View 模型绑定(bind)

标签 asp.net-mvc-3 razor partial-views

我有一个强类型 View ,Edit,它有一个名为 OrderModel 的模型。在这个 View 中,我使用了一个强类型的局部 View ,它有一个名为 OrderTypeModel 的模型。包含 jqueryui 自动完成文本框的部分 View _OrderTypeAutoComplete。如果我用这段代码渲染 View ,

public ActionResult Edit(){
    return View();
}

我的编辑 View 包含以下 Razor 标记
<div class="editor-field">
    @Html.Partial("_OrderTypeAutoComplete")
    @Html.HiddenFor(model => model.OrderTypeID)
    @Html.ValidationMessageFor(m => m.OrderTypeID)
</div>

我的部分 View 包含此 Razor 标记
@{
    Layout = null;
}
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
@Html.AutoCompleteFor(model => model.OrderTypeID, x =>  x.OrderType, "Items","Orders")

当我渲染它时,一切都很好,我的自动完成效果很好(使用自动完成扩展)。无论如何,我需要在我的初始 OrderModel 中初始化一些东西,所以我将 Controller 中的代码更改为这个。
public ActionResult Edit(){
    return View(OrderService.GetInitializedOrderModel()); //returns a new OrderModel
}

现在,当我渲染 View 时,我得到了异常:
传入字典的模型项的类型为“Testing.Models.OrderModel”,但该字典需要“Testing.Models.OrderTypeModel”类型的模型项。

在我看来,在这条线上
@Html.Partial("_OrderTypeAutoComplete")

当我没有提供 OrderModel 时,Razor 引擎似乎会为 View 创建 OrderModel 并为部分 View 创建 OrderTypeModel。这将给出相同的结果。
public ActionResult Edit(){
    return View(new OrderModel())
}

我是 MVC 的新手,所以我不确定这里发生了什么。我只是想在 OrderModel 模型中为我的 View 提供一些简单的下拉值,这些值足够小,我不需要 jquery 回发即可获得。这就是我在我的模型中为我的编辑操作中的 Http Get 初始化的值。

任何帮助,将不胜感激。谢谢。

最佳答案

示例中缺少模型类的类定义,因此我无法确切说明发生了什么,但是...

@Html.Partial() method有一些重载:

@Html.Partial(string)
@Html.Partial(string, Object)
@Html.Partial(string, ViewDataDictionary)
@Html.Partial(string, Object, ViewDataDictionary)

前三个重载都只是最后一个重载的“别名”——当一切都说完了,它就是最后一个被调用的重载。

当您调用@Html.Partial(string)并且不传递模型值或 ViewDataDictionary,ASP.NET MVC 将只传递当前 View 的 ViewDataDictionary(即 this.ViewData )。

换句话说,调用:
@Html.Partial(string)

本质上等同于:
@Html.Partial(string, this.ViewData)

...在你的情况下,this.ViewDataOrderModel 类型,而不是 OrderModelType .

关于asp.net-mvc-3 - MVC3 强类型局部 View 模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6791939/

相关文章:

asp.net - 上传时文件大小超过默认大小

Javascript 动画切换 3 种形式

c# - ASP.NET MVC - 重定向到正确的成员资格提供者

c# - asp.net mvc 3 razor view -> strongly typed List of tuple 问题

dependency-injection - 如何使用 ASP.NET MVC 3 RTM 配置依赖注入(inject)

c# - 如何防止根据条件执行 Controller 操作?

c# - 处理 @HTML.Label 的 lambda

javascript - 在 mvc4 中使用 jquery 获取 View 页面

c# - 使用 ViewRenderer 在 SignalR 响应中渲染 PartialView?

ruby - 部分轨道但被多个 View 使用