Компонент вида Asp.Net Core MVC с Html.Checkbox для лямбды (модель переопределения) - PullRequest
0 голосов
/ 15 сентября 2018

Мне нужен способ ссылки на другую модель в моем компоненте представления, где я пытаюсь связать вспомогательный объект 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 считает, что мое лямбда-выражение относится к моей модели «TableResult», а не к «TenantSettingsModel», где существует «AutoUpdateProperty».

Редактировать: Если я приведу TableResult к TenantSettingsModel в контроллере, а затем удалю свой оператор модели в представлении, я получу ошибку времени выполнения MVC, сообщив следующее:

InvalidOperationException: элемент модели, передаваемый в ViewDataDictionary, имеет тип 'Microsoft.WindowsAzure.Storage.Table.TableResult', но для этого экземпляра ViewDataDictionary требуется элемент модели типа 'TeamsAnalyzer.Models.TenantSettingsModel'.

Вот почему мой взгляд имел следующий код:

var result = Model.Result as TenantSettingsModel;

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Ответ здесь в два раза:

  1. Мне нужно было преобразовать TableResult.Result как TenantSettingsModel в контроллере следующим образом:

    TableResult retrievedResult = await tableName.ExecuteAsync(retrieveOperation);
    return View(retrievedResult.Result as TenantSettingsModel);
    
  2. Мне нужно было удалить ссылку @model на TableResult в представлении компонента представления и заменить ее правильной ссылкой следующим образом:

    @model TeamsAnalyzer.Models.TenantSettingsModel
    

Затем я мог бы установить свое лямбда-выражениеследующим образом:

@Html.CheckBoxFor(m => m.AutoUpdateNodes)
0 голосов
/ 15 сентября 2018

На мой взгляд, вы должны привести модель на уровень контроллера, который должен вернуть модель напрямую,

.,var tenantSettingViewModel = tableResult.Result as TenantSettingsModel;return View (tenantSettingViewModel);

Таким образом, вам не нужно приводить объект на уровне View, и вы также можете напрямую использовать HtmlHelpers для MVC с моделями.

...