В настоящее время я создаю форму с .Net core 2, в которой содержится список объектов. Вот пример самой формы.
public class InsuranceForm
{
public IList<WindowModel> Windows { get; set; }
}
public class WindowModel
{
public string WindowImage { get; set; }
public string WindowDamageDescription { get; set; }
}
В View мне нужно иметь возможность добавить два поля ввода (изображение окна и описание повреждения окна) нажатием кнопки, а затем отправить форму с массивом этих свойств с помощью кнопки отправки.
Я пытался реализовать добавление новых полей ввода с VueJs, но не удалось отправить данные в массив.
<div id="newWindowButtons">
<button type="button" v-on:click="addNewWindow" class="btn btn-success">
Add new window
</button>
</div>
<div v-for="(window, index) in windows">
<div class="form-group mt-3">
<input v-model="windows.WindowImage" type="file" class="form-control-file">
</div>
<div class="form-group">
<input class="form-control" v-model="window.WindowDamageDescription"
type="text" />
</div>
</div>
Как правильно передать значения этих входных данных при отправке?
Спасибо.
Обновление с полным кодом.
Контроллер, который принимает форму, прямо сейчас выглядит следующим образом.
[HttpPost]
public async Task<IActionResult> Insurance([FromForm]InsuranceForm insuranceForm)
{
var client = new HttpClient();
if (ModelState.IsValid)
{
var response = await client.PostAsJsonAsync("url", insuranceForm);
return RedirectToAction("Index");
}
else
{
var modelStateErrors = ModelState.Keys.SelectMany(key => ModelState[key].Errors);
}
return View(insuranceForm);
}
Код VueJs:
var app = new Vue({
el: "#app",
data: {
window: {
WindowImage: "",
WindowDamageDescription: ""
},
windows: [],
},
methods: {
addNewWindow: function () {
this.windows.push(Vue.util.extend({}, this.window));
}
},
});
View
<form method="post" id="insuranceForm">
<div id="newWindowButtons">
<button type="button" v-on:click="addNewWindow" class="btn btn-success">
Add new window
</button>
</div>
<div v-for="(window, index) in windows">
<div class="form-group mt-3">
<input v-model="windows.WindowImage" type="file" class="form-control-file">
</div>
<div class="form-group">
<input class="form-control" v-model="window.WindowDamageDescription"
type="text" />
</div>
</div>
<div class="d-flex justify-content-start">
<button type="submit" class="btn btn-primary btn-lg" id="submitForm">Send</button>
</div>
</form>