javascript - 如何使用动态创建的只读元素提交 MVC razor beginform
问题描述
我正在尝试构建一个表单,该表单将使用 javascript 动态创建只读输入并将这些值与模型值一起传递到控制器中,但我的控制器方法中的 FormCollection 仅包含模型值,而不包含输入值。对我做错的任何帮助都会很棒。这是我的代码:
Model.Courses 包含 int CourseId 和字符串 CourseName。我正在使用 CourseName 的值构建只读输入以传递到 FormCollection 以建立每个训练营中包含的课程的顺序。
看法:
<div class="container">
<div class="row">
<div class="col-xs-12">
<h2>Create Bootcamp</h2>
@using (Html.BeginForm("Create", "LMSBootcamp", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>
</div>
<div class="row">
<div class="col-xs-6 w-50">
<h5>Course Order</h5>
<ol id="orderContainer">
</ol>
</div>
<div class="col-xs-6 w-50">
<h5>Available Courses</h5>
<ul>
@foreach (var course in Model.Courses.OrderBy(a=>a.CourseName))
{
<li id="@course.CourseId" onclick="Add_Course()" data-arg="@course.CourseId">@course.CourseName</li>
}
</ul>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
</div>
</div>
<script type="text/javascript">
function Add_Course() {
var courseName = event.target.innerHTML;
var courseId = event.target.getAttribute('data-arg');
//create the readonly input for the course desired
var order = document.createElement("input");
order.readOnly = true;
order.setAttribute("type", "text");
order.setAttribute("value", courseName);
order.classList.add("form-control", "text-box", "single-line");
//create li element
var listElement = document.createElement("li");
listElement.onclick = function Remove_Course() {
var element = event.target
element.remove();
}
//add input to list element
listElement.appendChild(order);
//add list element to container
var orderContainer = document.getElementById("orderContainer");
orderContainer.appendChild(listElement);
}
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(FormCollection courseOrder)
{
return RedirectToAction("Index");
}
谢谢!
解决方案
在您提交之前,请确保这些动态添加的输入具有正确的模型名称,您应该没问题。因此,在您的示例中,它将类似于以下内容:
<input type="text" name="courseName[0]" value="courseName 1"/>
<input type="text" name="courseName[1]" value="courseName 2"/>
<input type="text" name="courseName[3]" value="courseName 3"/>
模型绑定器将自动创建一个包含这 3 个字符串(“courseName 1”、“courseName 2”、“courseName 3”)的字符串列表,并将其分配给相应的属性,在本例中为值。
推荐阅读
- python - Keras:如何获取权重,使权重变为一维数组,然后使权重形状变为初始形状?
- mysql - 显示另一种日期格式的 SQL 查询是什么?
- typescript - 如何在运行时确定 typescript 中联合类型的确切类型?
- c# - 如何在符号后转换为驼色套管?
- haskell - 哈斯克尔 | 例外:函数 myAny 中的非详尽模式
- dbcontext - 如何在不同的 WebApp 之间共享 DbContext?
- python - “三和”问题空间复杂度 - 为什么是 O(n)?
- spring-batch - 使用 KafkaItemReader 从特定日期范围内的 Kafka 主题中获取记录(Spring 批处理作业以读取 kafka 流)
- puppet - puppet master 找不到 configdir,如何解决这个问题?
- python - 如果使用多个路由,则 url_for 将变量映射到 URL 会出现问题