Создание модели из контроллера не приведет к созданию файла JS, названного в честь модели. Вот почему вы получаете ошибку 404.
Если вы хотите передать модель из контроллера, то вам не нужен отдельный файл JS для той же цели.
Вот фрагменты кода для быстрого примера, который я сделал и протестировал.
Это действие контроллера:
public IActionResult KnockoutJS()
{
return View(new DataFileViewModel() {
Id="1",
DataFileLayoutId="file layout",
CompanyId = "{E20B0561-3458-412C-B5FA-DB1354D40D21}",
FileTypeId ="TEXTFILE",
FileNameId="TEXT",
MessageToClient = "I originated from the view model rather than the model."
});
}
Это инициализация view и knockoutJS. Чтобы точно ответить на ваш вопрос, я добавил код ko.mapping, но вы не должны использовать этот плагин, так как от его разработки отказались, если вы не планируете его поддерживать :) В этом примере также используется jQuery. Вам не нужно, если вам это не нужно.
@model DataFileViewModel
@section scripts{
<script type="text/javascript">
$.ready.then(() => {
var mapping = ko.mapping.fromJS(@Html.Raw(Json.Serialize(Model)));
var dataFileViewModel = {
Id: '@Model.Id',
DataFileLayoutId:'@Model.DataFileLayoutId',
CompanyId: '@Model.CompanyId',
FileTypeId: '@Model.FileTypeId',
FileNameId: '@Model.FileNameId',
MessageToClient:'@Model.MessageToClient'
};
ko.applyBindings(dataFileViewModel, document.getElementById("bindingRoot"));
});
</script>
}
Вам также необходимо убедиться, что knockoutJS загружен, прежде чем пытаться применить привязки.
И, наконец, вот HTML-код с привязками.
<div id="bindingRoot">
<p data-bind="text: MessageToClient"></p>
<div>
<div>
<label>Id :</label>
<span data-bind="text: Id"></span>
</div>
<div>
<label>DataFileLayoutId :</label>
<span data-bind="text: DataFileLayoutId"></span>
</div>
<div>
<label>CompanyId :</label>
<span data-bind="text: CompanyId"></span>
</div>
<div>
<label>FileTypeId :</label>
<span data-bind="text: FileTypeId"></span>
</div>
<div>
<label>FileNameId :</label>
<span data-bind="text: FileNameId"></span>
</div>
</div>
Результат в браузере