c# - 带有 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;
解决方案
在我看来,你应该在控制器级别转换模型,直接返回模型,
. . var tenantSettingViewModel = tableResult.Result as TenantSettingsModel; 返回视图(租户设置视图模型);
这样,您不必在视图级别强制转换对象,您还可以直接利用 MVC 的 HtmlHelpers 和模型。
推荐阅读
- system-verilog - 用于标记不正确的 verilog 事件区域的 SV 断言
- python - SWIG 构建模块的 VSCode 自动完成功能
- python - 根据我在哪个文件夹中打开 vs 代码,在 VS 代码中打开文件或导入模块时遇到问题
- android - Jetpack 的不良行为构成 HorizontalPager
- google-cloud-platform - 当规则设置为“仅预览”时,Cloud Armor 日志不是很清楚
- python - 井字游戏问题
- python - 如何以最少的列值从其他数据框中唯一地定义一个数据框?
- javascript - 为什么要在官方文档中为诸如 react 之类的流行库使用函数声明
- python - 字典列表中重复(公共)键的总和值
- itfoxtec-identity-saml2 - 使用 .Net Framework CertificationValidationMode 被忽略?