我需要一种在视图组件中引用其他模型的方法,在该模型中我试图绑定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;
答案 0 :(得分:1)
我认为,您应该将模型转换为控制器级别,并应直接返回模型
。 。 var tenantSettingViewModel = tableResult.Result作为TenantSettingsModel; 返回View(tenantSettingViewModel);
这样,您不必在View级别上强制转换对象,还可以直接将MVC的HtmlHelpers与模型一起使用。
答案 1 :(得分:0)
这里的答案有两个:
我需要按以下方式在控制器中将TableResult.Result转换为TenantSettingsModel:
TableResult retrievedResult = await tableName.ExecuteAsync(retrieveOperation);
return View(retrievedResult.Result as TenantSettingsModel);
我需要在视图组件视图中删除对TableResult的@model引用,并将其替换为正确的引用,如下所示:
@model TeamsAnalyzer.Models.TenantSettingsModel
然后我可以将lambda表达式设置如下:
@Html.CheckBoxFor(m => m.AutoUpdateNodes)