我想了解更多关于MVC 5的内容,所以我正在为自己编写一个博客网站以了解更多信息。在MVC 5客户端添加项目选择列表ASP
我已经设置了标签的选择列表,并希望能够从创建博客条目页面添加新标签,而不必记住在创建新帖子之前设置标签。我正在考虑显示引导模式窗口的“添加标签”按钮,用户可以在其中添加新标签。
这里是我的控制器操作:
public ViewResult CreateBlogPost()
{
CreateEditBlogViewModel viewModel = new CreateEditBlogViewModel();
viewModel.BlogPost = new Core.BlogPost();
viewModel.BlogPost.ShortBody = "<p>Something short and sweet to describe the post</p>";
viewModel.BlogPost.Body = "<p>Enter something blog worthy here...</p>";
viewModel.Tags = new SelectList(_blogRepo.BlogTags(), "Id", "Name");
viewModel.Categories = new SelectList(_blogRepo.BlogCategories(), "Id", "Name");
return View(viewModel);
}
这里是在视图中的HTML:
<div class="row">
<div class="form-group">
@Html.LabelFor(m => m.BlogPost.Tags, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.ListBoxFor(m => m.SelectedTags, Model.Tags, new { @class = "form-control chosen-select", @data_placeholder = "Start typing to see a list of tags" })
</div>
</div>
</div>
<div class="row">
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#tagModal">
Add Tag
</button>
</div>
这里是我的模态窗口局部视图:
@using (Html.BeginForm("SaveTag", "Home", FormMethod.Post, new { id = "tag-form" }))
{
@Html.AntiForgeryToken()
<!-- Modal -->
<div class="modal fade" id="tagModal" tabindex="-1" role="dialog" aria-labelledby="tagModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="tagModalLabel">Enter a name for a new tag</h4>
</div>
<div class="modal-body">
<input type="text" id="Name" placeholder="Enter a new tag name" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
}
是否有可能在客户端添加标签,将其保存到数据库中,然后将其添加到我的标签选择列表机智豪特刷新页面?
PS:仅供参考我使用从here选择的多选。
@section scripts {
<script type="text/javascript" src="~/Scripts/chosen.jquery.min.js"></script>
<script type="text/javascript">
$(".chosen-select").chosen()
</script>
}
编辑:我已经更新了所有,使视图给用户的模式窗口中输入新的标签名称的代码的问题。我只是不确定如何发布不离开页面导航,所以我猜测需要某种类型的Ajax文章。然后如何处理从该帖子返回的数据。那么如何将新的持久记录添加到选择列表中?
我知道标签没有传递给控制器方法,因为它没有绑定到任何类型的模型,而是因为我在父视图上使用视图模型,我不知道我会如何处理这里也是。
我可以看到这是如何工作和实施它。我可以看到使用Firefox开发人员工具将新选项添加到html源代码的选项列表中(看起来我比我第一次想到的更接近解决方案)。但是,选择选择的UI元素在页面刷新之前似乎不会识别它。所以为了澄清 - 它附加了html源文件'
取消,我读了选择的网站,并且有一个更改/更新事件,你可以触发哪个是$( “#SelectedTags”)。trigger(“chosen:updated”);'taglist.append('后面的'''''''''''''''').val(ID).text(tagName.val()));'如果你可以详细说明关于如何处理未能将标记保存在分贝中的问题,我很乐意+1!干杯。 – paulpitchford
我已经有'tagList.trigger(“选择:更新”)行;'在我的答案:)。有几种处理失败的方法 - 你可以'返回Json(null)'并在脚本中检查if(id){// add option} else {// oops}'或者你可以返回一个'HttpStatusCodeResult'指示错误,然后添加'.fail(function(result){// oops});'到'$ .post'函数 - 我已经用示例更新了答案 –