Как я могу получить доступ к свойству модели внутри viewmodel с помощью asp-for?

#asp.net #asp.net-mvc #asp.net-core #viewmodel #tag-helpers

#asp.net #asp.net-mvc #asp.net-core #viewmodel #помощники тегов

Вопрос:

У меня есть эта модель

 public partial class MtbWarehouse
{
    public int Idhwarehouse { get; set; }
    public string Namewh { get; set; }
}
  

Я реализую модель в этой модели представления

 public class WarehouseViewModel 
{
    public MtbWarehouse Warehouse { get; set; }
    public string ListAction { get; set; } = "Index";
}
  

И я использую WarehouseViewModel в представлении

 @model ViewModel.warehouseviewmodel 
<input type="text" asp-for="Warehouse" class="form-control" placeholder="">
  

Как я могу получить доступ, Namewh используя asp-for , потому что эта функция asp-for лучше, чем использование

 @Html.TextBoxFor()
  

Комментарии:

1. Что такое namewh ? Никогда не слышал об этом раньше

2. namewh — это свойство в модели, которое я реализую в warehouse viewmodel

3. где вы хотите получить к нему доступ? как?

4. я хочу получить к нему доступ в режиме просмотра хранилища. в прошлом это использовало html.textbox, теперь я не знаю.

5. Вы пробовали asp-for="Warehouse.Namewh" ? Также кажется, что ваш @model не соответствует имени вашего класса, но я предполагаю, что многое работает.

Ответ №1:

Если вы после рендеринга вводите текстовый элемент для Namewh свойства Warehouse свойства вашей модели представления, вы можете использовать точечную нотацию для доступа к свойству дочерних свойств. Вот так

 <form asp-action="Index" asp-controller="Home">   
    <input type="text" asp-for="Warehouse.Namewh" />
    <input type="submit"/>
</form>
  

Это сгенерирует входной текстовый элемент с именем Warehouse.Namewh и отобразит значение этого свойства, если вы зададите его в своем методе GET action.

VS Intellisense все еще может отображать это как недопустимое красным цветом. Но когда этот код будет выполнен, помощник по тегу сгенерирует правильное поле ввода со значением

Комментарии:

1. это не так. я хочу получить доступ к хранилищу в warehouseviewmodel старым способом, используя @html.textboxfor(m => m.warehouse.namewh) новым способом, которого я не знаю

2. При использовании asp-for="Warehouse.Namewh" оно выдает атрибут name как name="Warehouse.Namewh" . Есть ли какой-нибудь способ заставить его генерироваться name="Namewh" ?