从视图到控制器获取html表信息
我正在使用ASP.NET MVC,我的视图中有一个动态表,用户可以添加和删除行从视图到控制器获取html表信息,html,asp.net-mvc,view,controller,Html,Asp.net Mvc,View,Controller,我正在使用ASP.NET MVC,我的视图中有一个动态表,用户可以添加和删除行 <table class="table" id="tableClasses"> <tr> <th>Class</th> <!-- Icon to add a line. Done with javascript --> <th><span class="
<table class="table" id="tableClasses">
<tr>
<th>Class</th>
<!-- Icon to add a line. Done with javascript -->
<th><span class="table-add glyphicon glyphicon-plus"></span></th>
</tr>
@foreach (string sClass in tClasses)
{
<tr>
<td contenteditable="true">@sClass</td>
<td>
<span class="table-remove glyphicon glyphicon-remove"></span>
</td>
</tr>
}
<!-- This is our clonable table line -->
<tr class="hide">
<td contenteditable="true">New Class</td>
<td>
<!-- Icon to remove the line. Done with javascript -->
<span class="table-remove glyphicon glyphicon-remove"></span>
</td>
</tr>
</table>
棘手的是,SCLASSFASTLANE在数据库中存储为“A、B、C、X”
这就是为什么我使用自定义模板来显示和修改它,并且我需要一个动态表(上面的代码) 好吧,我终于解决了这个问题,下面是我最后做的: 以下是视图(EditorTemplate)代码(变化不大):
这可能不是最漂亮的解决方案,但就我目前所掌握的知识和所能得到的帮助而言,目前还可以。您介意发布控制器代码吗?此外,您还必须将其包含在
中,或者使用jquery执行POST
。您似乎没有表单,即使有表单,也没有生成任何表单控件,因此没有任何可发布到控制器的内容。您将需要使用javascript/jquery获取值,并使用ajax将它们发布到控制器。您可以给
元素一个类名,或者只需使用循环每个
元素并获取其第一个
元素。我发布了控制器代码。我尝试在元素周围使用一个表单,但它似乎不起作用。你有没有一个例子可以说明我如何使用jquery和Ajax实现这一点?你到底为什么要使用
public ActionResult Edit([Bind(Include = "PKAL,FKHC,SIATA,SICAO,SNAME,SETDEARLY,SETDLATE,SLASTMIN,SCLASSFASTLANE,SDCSINTERFACE")] AIRLINE aIRLINE)
{
if (ModelState.IsValid)
{
aIRLINE.SETDEARLY = aIRLINE.SETDEARLY.Replace(":", string.Empty);
aIRLINE.SETDLATE = aIRLINE.SETDLATE.Replace(":", string.Empty);
aIRLINE.SLASTMIN = aIRLINE.SLASTMIN.Replace(":", string.Empty);
FormCollection collection = new FormCollection();
collection.Get("classTemp");
db.Entry(aIRLINE).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.FKHC = new SelectList(db.HANDLER, "PKHC", "SHCODE", aIRLINE.FKHC);
return View(aIRLINE);
}
<div id="table" class="table-editable">
<table id="tableClasses" class="table">
<tr>
<th>@Resource.ClassFastLane</th>
<th><span class="table-add glyphicon glyphicon-plus"></span></th>
</tr>
@foreach (string sClass in tClasses)
{
<tr>
<td contenteditable="true">@sClass</td>
<td>
<span class="table-remove glyphicon glyphicon-remove"></span>
</td>
</tr>
}
<!-- This is our clonable table line -->
<tr class="hide">
<td contenteditable="true"></td>
<td>
<span class="table-remove glyphicon glyphicon-remove"></span>
</td>
</tr>
</table>
<script>
//Store the class html table values in a string array and post it to the controller.
//function returnClasses() {
$("form").submit(function (e) {
//On empêche le formulaire de faire un submit.
e.preventDefault();
//On sauve les données de la table des classes vers le controller.
var TableData = new Array();
$('#tableClasses tr').each(function (row, tr) {
TableData = TableData + $(tr).find('td:eq(0)').text();
});
var postData = { values: TableData };
$.ajax({
type: "POST",
url: "/AIRLINE/SaveClasses",
//url: "/ControllerHelper/SaveClasses",
data: postData,
success: function (result) {
submit();
},
});
})
//Une fois les données sauvées, on fait le submit.
function submit() {
$("form").unbind('submit').submit();
}
</script>
public ActionResult Edit([Bind(Include = "PKAL,FKHC,SIATA,SICAO,SNAME,SETDEARLY,SETDLATE,SLASTMIN,SCLASSFASTLANE,SDCSINTERFACE")] AIRLINE aIRLINE)
{
if (ModelState.IsValid)
{
aIRLINE.SCLASSFASTLANE = ControllerHelper.getClassesTemp();
ControllerHelper.resetClassesTemp();
db.Entry(aIRLINE).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.FKHC = new SelectList(db.HANDLER, "PKHC", "SHCODE", aIRLINE.FKHC);
return View(aIRLINE);
}