Привязать к свойствам
Во-первых, вы определили поля в ваших ViewModels. Их можно читать в вашем представлении, но для работы привязки модели необходимо объявить их как Свойства с аксессором get и set:
public class PortfolioDetailsVM
{
//...
public Portfolio Portfolio { get; set; }
public PortfolioProject PortfolioProject { get; set; }
public IEnumerable<Project> Projects { get; set; }
}
Это должно заставить ваш код привязки работать.
Лучшие модели переплета
Во-вторых, вы используете привязку модели немного некорректно. Старайтесь не связываться напрямую с вашими моделями данных (например, типом PortfolioProject). Модель, к которой вы привязываетесь, не должна содержать ссылок на типы моделей данных.
Вместо этого я обычно объявляю только то, что мне действительно нужно в модели, к которой я привязан, чтобы мне никогда не приходилось использовать этот атрибут ol 'Bind
. Простой пример для вашего случая:
public class DetailsAddProjectVM
{
public string SelectedProjectId { get; set; }
}
с соответствующей формой:
@model PortfolioDetailsVM
<select asp-for="SelectedProjectId" class="custom-select form-control">
...
</select>
какие сообщения
public async Task<IActionResult> AddProject(DetailsAddProjectVM bindingModel)
{
//look ma, no [Bind]!
var projectid = bindingModel.SelectedProjectId;
}
Конечно, для отображения соответствующей формы вам также необходимо объявить свойство SelectedProjectId
в исходном PortfolioDetailsVM
.
Как видите, у вас нет для привязки к вашей исходной модели просмотра вообще.