MVC将Texbox中的多个关键字保存到数据库中

时间:2016-11-08 00:28:07

标签: c# jquery asp.net-mvc

我有一个Texbox,我从数据库中获得了多个keywords的自动完成jQuery脚本。当我的Textbox如下所示时,如何向控制器发送数据:@Html.TextBox("search")我还有多个值,所有值都有不同的ID。

我如何存储多个值?我可以有listarray吗?或者我修改了帖子表,然后在那里添加标签?或者我制作第三个模型来存储带有标签的帖子?

我现在很困惑,如何从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答案。似乎非常接近我想做的事。

2 个答案:

答案 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)
{
}