首页 > 解决方案 > 带有 Html.Checkboxfor lambda 的 Asp.Net Core MVC 视图组件(覆盖模型)

问题描述

我需要一种在我试图绑定 Html 帮助器对象(checkboxfor)的视图组件中引用不同模型的方法。

@model Microsoft.WindowsAzure.Storage.Table.TableResult

@{ 
    var result = Model.Result as TenantSettingsModel;
}
    <form asp-controller="Settings" asp-action="SaveSettings" method="post">
    <table border="0">
    <tr>
        <td><label for=@result.PartitionKey>Your API Key: </label> </td>
        <td>@result.PartitionKey</td>
    </tr>
    <tr>
        <td><label for=@result.RowKey>Domain Name: </label></td>
        <td>@result.RowKey</td>
    </tr>
    <tr>
        <td><label for="@result.AutoUpdateNodes">Auto Update Nodes: </label> 
    </td>
        <td>@Html.CheckBoxFor(m => m.AutoUpdateNodes)</td>

    </tr>

MVC 认为我的 lambda 表达式是指我的“TableResult”模型与存在“AutoUpdateProperty”的“TenantSettingsModel”。

编辑:如果我在控制器中将 TableResult 转换为 TenantSettingsModel,然后在视图中删除我的模型语句,我会收到一个 MVC 运行时错误,说明如下:

InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“Microsoft.WindowsAzure.Storage.Table.TableResult”,但此 ViewDataDictionary 实例需要“TeamsAnalyzer.Models.TenantSettingsModel”类型的模型项。

这就是为什么我的观点有以下代码:

var result = Model.Result as TenantSettingsModel;

标签: c#razorasp.net-core-mvc

解决方案


在我看来,你应该在控制器级别转换模型,直接返回模型,

. . var tenantSettingViewModel = tableResult.Result as TenantSettingsModel; 返回视图(租户设置视图模型);

这样,您不必在视图级别强制转换对象,您还可以直接利用 MVC 的 HtmlHelpers 和模型。


推荐阅读