【发布时间】:2017-03-27 08:37:45
【问题描述】:
我有这个带有 div 的 HTML 代码,我想将其内容传递给控制器。 div 基本上包含label-primary 类(link)的一些跨度项。我希望能够在控制器的这个 div 中获取标签的名称。我的想法是,一旦单击提交按钮,就获取 label-container div 内的项目列表,并将它们的名称作为 List<string> OwnerTerminals 值传递给控制器。我该怎么做?
HTML + JS 代码:
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
...
<div id="register-terminal-panel" class="panel panel-default" style="max-width: 450px;">
<div class="panel-heading" style="color:#003F8B">
Add terminals to client
</div>
<div class="panel-body">
<div id="label-container"></div>
<div class="input-group input-group pull-right">
<span class="input-group-addon">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</span>
<input id="register-terminals-search" type="text" class="form-control" placeholder="Search terminals" aria-describedby="search-addon" onkeyup="searchTerminals()">
</div>
</div>
<ul id="register-terminal-list-container" class="list-group">
@foreach (Point p in terminals)
{
<li id="list-item-@p.Name"><a href="javascript:void(0)" class="list-group-item" onclick="createLabel('@p.Name')">@p.Name</a></li>
}
</ul>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Register" />
</div>
</div>
}
<script>
function closeLabel(item) {
item.parentElement.remove();
var listItem = '\n<li id="list-item-' + item.parentElement.id + '"><a href="javascript:void(0)" class="list-group-item" onclick="createLabel(\'' +
item.parentElement.id + '\')">' + item.parentElement.id + '</a>';
$('#register-terminal-list-container').append(listItem);
sortUnorderedList("register-terminal-list-container");
};
function createLabel(name) {
var label =
'<span id="' + name + '" class="label label-primary terminal-label"><span class="glyphicon glyphicon-remove" onclick="closeLabel(this)" id="terminal-label-close-btn"></span> ' + name + '</span>\n'
$('#label-container').append(label);
$('#list-item-' + name).remove();
};
</script>
型号:
public class RegisterViewModel
{
...
public List<string> OwnerTerminals { get; set; }
}
【问题讨论】:
-
当您创建标签时,为什么不将名称存储在所需元素的
data-name中。不确定我是否看错了,但是给多个元素提供相同的 idterminal-label-close-btn是无效的,但是您可以给它们一个带有该值的data-id,然后将其用作选择器以将data-name值放入您的数组中然后可以发帖 -
@Fran 不确定我是否理解。我该怎么做?
terminal-label-close-btn不是标签的 id,它是标签内的“X”按钮的 id(用于从列表中删除标签)。 -
别管那个按钮了,然后抱歉:) 虽然在多个元素上相同的
id仍然很糟糕。要不自动提交,您可以使您的按钮type="button"绑定到它的点击事件,在该点击事件中构建您的数组并使用手动form.post使用 jquery ajax 发布,如此处所示 http://stackoverflow.com/questions/425095/submit-form-using-ajax-and-jquery 将您的数组作为数据到控制器动作。 -
@Fran 所以没有办法以剃刀的方式做到这一点?
-
您可以为每个包含该值的标签创建一个隐藏字段,以便在提交时发布隐藏字段。然而,在我看来,这样会增加不必要的 DOM 混乱。建议的 Ajax 路由非常常见。大多数时候,我什至不关心那些只读案例的表单,只需添加一个带有目标 url 的 div 并仅使用 ajax 发布,但这当然取决于您对表单其余部分的确切用例。
标签: javascript html asp.net razor