ASP.NET MVC:在自动完成时保存多个值
我有一个mysql数据库,其中有表“可交付成果”、“标记”和“可交付成果有标记”。我想将标签链接到可交付成果 这是我在javascript文件中执行的操作:ASP.NET MVC:在自动完成时保存多个值,asp.net,mysql,asp.net-mvc,many-to-many,Asp.net,Mysql,Asp.net Mvc,Many To Many,我有一个mysql数据库,其中有表“可交付成果”、“标记”和“可交付成果有标记”。我想将标签链接到可交付成果 这是我在javascript文件中执行的操作: <script type="text/javascript" language="javascript"> $(function () { var object = {}; $.ajax({ type: "GET", url: "/Deliv
<script type="text/javascript" language="javascript">
$(function () {
var object = {};
$.ajax({
type: "GET",
url: "/Deliverable/Tags",
dataType: "json",
success: function (data) {
object.tags = data;
}
});
function split(val) {
return val.split(/,\s*/);
}
function extractLast(term) {
return split(term).pop();
}
$("#tags")
// don't navigate away from the field on tab when selecting an item
.bind("keydown", function (event) {
if (event.keyCode === $.ui.keyCode.TAB &&
$(this).data("ui-autocomplete").menu.active) {
event.preventDefault();
}
})
.autocomplete({
minLength: 0,
source: function (request, response) {
// delegate back to autocomplete, but extract the last term
response($.ui.autocomplete.filter(
object.tags, extractLast(request.term)));
},
focus: function () {
// prevent value inserted on focus
return false;
},
select: function (event, ui) {
var terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push(ui.item.value);
// add placeholder to get the comma-and-space at the end
terms.push("");
this.value = terms.join(", ");
return false;
}
});
});
</script>
标签操作:
public JsonResult Tags()
{
var data = (repository.GetTags()).ToArray();
return Json(data, JsonRequestBehavior.AllowGet);
}
在我的存储库中:
public IQueryable<string> GetTags()
{
return from tag in entities.tags
orderby tag.tag_name
select tag.tag_name;
}
public IQueryable GetTags()
{
从entities.tags中的标记返回
orderby tag.tag\u名称
选择tag.tag\u name;
}
我不知道如何将其保存到数据库中。有人能帮我吗?在post操作中,将FormCollection作为参数,并从中收集标记。没有自动的方法。您可以实现一些自定义模型绑定,但这可能不值得努力。如果我正确理解了您的问题,您已经实现了标记处理,如下所示:
input type=text
标签变量(无错误处理(!)
split(term)
的逻辑对数组进行拆分,并将其序列化。你可以
使用并手动创建JSON进行序列化
对象,或使用
. 我会选择第一个选项
因为这样我可以更好地控制JSON格式并避免
MVC默认模型绑定器存在问题
2)Ajax调用
当JSON对象准备好发送时,触发
请求您的MVC POST操作方法。当您保存状态时,始终
避免GET,因为新版本的浏览器可以扫描您的页面并
使用GET请求主动预加载URL。你不想在这里。属于
当然,在ajax调用中使用数据作为数据参数
3)行动方法
当请求到达时,您必须在控制器中处理它
使用新的动作方法。通常在这种情况下,您将
类似于publicJSONResult SaveTags(SaveTagsModel SaveTags){
…}
它使用存储库保存标记并返回
说“OK”或“ERROR”之类的话
response.isSaved=true/false)。棘手的部分可能是设计视图模型
根据您的JSON对象-可能会有所帮助。关于
收藏可能是有价值的信息
保存时,请使用事务以确保立即保存所有内容。
首先检查数据库中是否存在每个标记,并插入
不存在。之后,检查每个标签是否有合适的标签
可交付成果中的n-n关系有标记,如果没有,则插入标记。
我认为您应该对这两个应用程序使用相同的存储库封装
行动
有一种方法可以对serializeArray()
'd集合进行建模绑定,请参阅
public IQueryable<string> GetTags()
{
return from tag in entities.tags
orderby tag.tag_name
select tag.tag_name;
}