Я пытаюсь узнать больше о 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>
}
Можно ли добавить тег на стороне клиента, сохранить его в db, а затем добавить его в мои теги, выбрать список wit hout обновить страницу?
PS: FYI Я использую Выбранный мультивыбор от here.
@section scripts {
<script type="text/javascript" src="~/Scripts/chosen.jquery.min.js"></script>
<script type="text/javascript">
$(".chosen-select").chosen()
</script>
}
EDIT: Я обновил этот вопрос со всеми код, который делает вид дает пользователю модальное окно, чтобы ввести новое имя тега. Я просто не уверен, как отправлять сообщения, не переходя от страницы, поэтому я предполагаю, что требуется какая-то должность Ajax. И затем, что делать с данными, которые возвращаются с этой должности. Как добавить новую сохраненную запись в список выбора?
Я знаю, что тег не переходит к методу контроллера, так как он не привязан к какой-либо модели, но, поскольку я использую модель представления на родительском представлении, я не уверен, как бы я справился с этим здесь тоже.
Я вижу, как это работает и реализуется. Я вижу, что новая опция добавляется в список опций в источнике html с помощью инструментов разработчика Firefox (похоже, я был ближе к решению, чем я думал). Однако выбранный элемент select ui, похоже, не распознает его до обновления страницы. Итак, чтобы уточнить - он добавляет источник html '
Отмените это, я прочитал выбранный веб-сайт и есть событие изменения/обновления, которое вы можете вызвать, который является' $ («#SelectedTags»). Trigger («selected: updated»); 'after' tagList.append ($ ('') .val (ID) .text (tagName.val()));' Если вы могли бы разработать о том, как я буду справляться с неспособностью сохранить тег в db, я тоже с радостью добавлю +1! Приветствия. – paulpitchford
У меня уже была строка 'tagList.trigger (" selected: updated ");' в моем ответе :). Существует несколько способов обработки отказа: вы можете «вернуть Json (null)» и в скрипте проверить 'if (id) {// добавить опцию} else {// oops}' или вы можете вернуть 'HttpStatusCodeResult', указывающий ошибку, а затем добавить '.fail (function (result) {// oops});' to '$ .post' - я обновил ответ на примере –