2016-11-08 73 views
0

私はTexboxを持っています。データベースからオートコンプリートjQueryスクリプトを使ってkeywordsを複数取得しています。 Textbox@Html.TextBox("search")のようなもので、コントローラにデータを送信するにはどうしたらいいですか?また、すべてが異なるIDを持つ複数の値を持っています。MVC Texboxの複数のキーワードをデータベースに保存

複数の値を保存するにはどうすればよいですか?私はlistまたはarrayを持つことができますか?または、私は投稿テーブルを変更し、そこにタグを追加しますか?それとも、私はタグを使って投稿を保存するための3番目のモデルを作っていますか?

今私は混乱しています。どのようにしてTextboxから値を抽出してコントローラに送信し、それをdbに保存しますか?

この問題を解決する方法を教えてください。

EDIT:

仕事の間やタグでの私の関係は、このようなものです:

仕事モデル:

[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; } 

scriptTagIDと一緒にJobTableに値を入れて保存する必要がありますが、同じTagIDの複数の値を保存する方法が混乱しています。JobID。私はかなり確信していますoverthinkingこれです。今のところ私はこれを行うことを試みているstring[] keywords = Request.Form["search"].Split(',');以下のように提案します。今、私は@Yanga回答をしようとしていますについて

 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 

     }; 

これは私が仕事を作成する方法です。私がしたいことに非常に近いと思われます。

+0

あなたの不動産ニーズをあなたが返すデータのタイプに応じて 'int [] search'(または' string [] search')になるようにします。 –

+0

あなたは複数の値を1つに格納することができると思います区切り文字付きのテキストボックス(コンマ(、)など)→コントローラに渡します。コントローラー内で を使用すると、新しいカスタムModelBindingを作成し、モデルとバインドする方がよいでしょう。 ModelBinding自体は値を分割してリストとして返すだけです。 そのようなもの – RizkiDPrast

答えて

1

あなたの入力「検索」に例文の区切り記号 "、"がある場合。データベース内の各キーワードを保存するには

string[] keywords = model.search.Split(','); 

string[] keywords = Request.Form["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(); 
+0

私は今あなたの答えをしようとしています。そして、はい、私はテキストボックスでカンマを使用します。私は詳細については私の質問を編集しました。ありがとうございました。 – Eduard

+0

さて、私は 'Request.Form [" search "]'だけを使い、 'TagNames = keywords'のように保存しました。私はこれを考えていた。今私がそれらを表示し、ホバーでその説明を表示したいときは、UI文字列がデータベース文字列と一致するところで検索をしなければなりません。 – Eduard

1

select2プラグインが必要ですオートコンプリートではなく、好きな方法で複数の値を選択するオプションが用意されていればselect要素がmultiple=trueとレンダリングされるので、送信されるのは値の配列です。

@Html.DropDown("search") 
@section scripts 
{ 
//Include select2 scripts here 
<Script> 
    $("#search").select2({...}) //configure it here with the URL for the autocomplete values 
</script> 
} 

とあなたのアクションで:あなたはとても種類string[]List<string>

の一つのパラメータを使用してアクションを持つことができ

、あなたのビューは次のようになります

public ActionResult Search(List<string> search) 
{ 
} 
関連する問題