我有一个Texbox,我从数据库中获得了多个keywords
的自动完成jQuery脚本。当我的Textbox
如下所示时,如何向控制器发送数据:@Html.TextBox("search")
我还有多个值,所有值都有不同的ID。
我如何存储多个值?我可以有list
或array
吗?或者我修改了帖子表,然后在那里添加标签?或者我制作第三个模型来存储带有标签的帖子?
我现在很困惑,如何从Textbox
中提取值并将它们发送到控制器,然后将它们存储在db中。
请先告诉我一些如何解决此问题的建议。
修改
我和Job之间的关系是这样的:
工作模式:
[ForeignKey("Tags")]
public int TagId { get; set; }
public virtual Tags Tags { get; set; }
标记模型:
[ForeignKey("Jobs")]
public int JobID { get; set; }
public virtual ICollection<Job> Jobs { get; set; }
我认为script
对帖子没用,因为它的工作正常,我只需要从中获取值并将其与JobTable
一起保存在TagID
中,但我很困惑仅存储一个TagID
来存储同一JobID
的多个值。我很确定我过度思考这个。目前我正在尝试按照以下建议执行此操作string[] keywords = Request.Form["search"].Split(',');
。
这是我创建工作的方式:
var jobs = new Job
{
//Non-Visible for users
ID = job.ID,
DateAdded = DateTime.Now,
DateExp = expireDate,
//UI Submit Data
DescJob = job.DescJob,
Name = job.Name,
//Relational Tables
XP = xp.Exp.ToString(),
UserID = LoggedUserId,
//Here the magic
//Just an example how I think
TagID = // Here values from my @Html.TextBox("search")
// If there are 2 3 4 values in textbox its very logical to do it with a foreach
// and get every ID and then store them. I still don't understand how my database
// will look like
};
现在我正在尝试@Yanga答案。似乎非常接近我想做的事。
答案 0 :(得分:1)
如果您的输入“搜索”具有例如“昏迷”的分隔符“,”。 您可以在控制器中提取关键字 使用拆分功能:
string[] keywords = Request.Form["search"].Split(',');
或与您的模型:
string[] keywords = model.search.Split(',');
要保存数据库中的每个关键字:
foreach (var keyword in keywords)
{
var KeywordsDBQuery = db.YourKeywordsTable.Where(k => k.Keyword == keyword).FirstOrDefault();
if (KeywordsDBQuery == null)
{
KeywordsDBQuery.DomainName = keyword;
db.YourKeywordsTable.Add(KeywordsDBQuery);
}
}
db.SaveChanges();
答案 1 :(得分:1)
您似乎需要一个select2插件而不是自动完成功能,它会让您选择以一种不错的方式选择多个值,它会使select
元素呈现multiple=true
,所以将提交的是一系列值。
您可以使用string[]
或List<string>
所以,您的观点应如下所示:
@Html.DropDown("search")
@section scripts
{
//Include select2 scripts here
<Script>
$("#search").select2({...}) //configure it here with the URL for the autocomplete values
</script>
}
并在你的行动中:
public ActionResult Search(List<string> search)
{
}