Thông thường tôi làm rất ít công việc trên mặt html của ứng dụng vì phần lớn tôi chỉ cho phép tạo ra cho tôi.Ràng buộc dữ liệu trong các giá trị MVC 5 và Select2 Mutiple với dao cạo
Tôi đang làm việc trên một ứng dụng cho một blog có Thẻ bài và Nhận xét. Những gì tôi muốn làm là khi tạo một bài đăng mới, tôi sẽ có thể thêm các thẻ hiện có vào bài đăng mới. Tôi đang cố gắng sử dụng Select2 nhưng tôi không thể tìm ra cách để làm cho các giá trị đã chọn được chuyển đến phương thức Create của tôi trong bộ điều khiển bài để chúng có thể được lưu trữ trong cơ sở dữ liệu.
Dưới đây là những gì tôi đang làm việc với:
namespace Blog.Data.Entities
{
public class Post
{
public virtual long PostId { get; set; }
-------------------
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public virtual long TagId { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}
}
bài viết khiển
// POST: /Post/Create
[HttpPost]
public ActionResult Create(PostsCreateViewModel postModel)
{
if (ModelState.IsValid)
{
Post post = new Post
{
Title = postModel.Title,
Body = postModel.Body,
PostDate = _dateTime.UtcNow
};
foreach (var tag in postModel.Tags)
{
post.Tags.Add(_tagRepository.GetTag(tag.TagId));
}
_postRepository.SavePost(post);
return RedirectToAction("Detail");
}
return View(postModel);
}
Tôi thành công có thể tải dữ liệu từ xa với: Json đang rời ra
<script type="text/javascript">
$(document).ready(function() {
$("#tags").select2(
{
placeholder: "Select a Tag",
minimumInputLength: 1,
multiple: true,
maximumSelectionSize: 5,
ajax: {
url: '@Url.Action("SearchTag", "Post")',
dataType: 'json',
data: function (term, page) {
return {
searchTerm: term,
page_limit: 10,
page: page,
};
},
results: function (data, page) {
var more = (page * 10) < data.total;
return { results: data, more: more };
}
}
});
});
</script>
Xem: thường tôi sẽ có một cái gì đó giống như
<div class="form-group">
@Html.LabelFor(model => model.Title, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
</div>
Làm thế nào tôi có thể viết html tương tự cho thẻ textbox tôi, vì vậy mà khi tôi nhấp vào lưu tất cả mọi thứ sẽ được lưu vào bảng phù hợp?
Hiện nay tôi chỉ có điều này cho Select2:
<div class="form-group">
@Html.LabelFor(model => model.Tags, new { @class = "control-label col-md-2" })
<div class="col-md-10">
<input id="tags" style="width: 300px" />
@Html.ValidationMessageFor(model => model.Tags)
</div>
</div>
nào sản xuất;
Không phải là ' select2' muti-select items chỉ là các chuỗi được phân tách bằng dấu phẩy? Bạn không thể lưu trữ thêm thông tin trong đó mà không cần chỉnh sửa 'select2'. Khi tôi đã sử dụng điều này trong quá khứ tôi đã chỉ cần chia 'chuỗi' được đăng .. và đẩy nó vào một bảng' Tags'. –
@SimonWhitehead tôi không tạo thẻ, tôi đang kéo chúng từ xa và tôi không gặp vấn đề gì với điều này. Tôi muốn chỉ định các thẻ đã chọn cho 'Post.Tags' – Komengem
Right .. nhưng' Tag' trong cơ sở mã của bạn có 'Name' và' Description'. Đây là thông tin nhiều hơn 'select2' multi-select cung cấp .. mà không cần chỉnh sửa thủ công nó. Đặt cược tốt nhất của bạn là đồng bộ tất cả các thẻ từ xa với bảng cơ sở dữ liệu 'Thẻ' cục bộ. Sau đó, bạn có thể ít nhất là khớp với chuỗi 'select2' cho bạn chống lại thẻ' Tên' trong bảng thẻ. Tôi có ý nghĩa gì không (hy vọng tôi là)? –