2016-04-19 15 views
0

これを理解しようとしている過去数日間、私はこれに取り組んできましたが、これを処理する方法として明確な答えは見つかりませんでした。彼らが必要のようASPフォーム配列データバインディング

class Activity 
    int Id 
    string Name 
    DateTime Date 
    int DurationMinutes 
    string Comment 

    ICollection<Tags> Tags 
    ICollection<Sources> Sources 

定期的な性質が結合します:

私はこのようになりますモデルを持っています。また、ユーザーがアクティビティにタグとソースを追加できるようにしたいと考えています。

はここで、フォームの構造です:

form visual

と、ここで私は現在、それを保存する方法は次のとおりです。 result

この方法では、データは通常の文字列として送信されます。私はこれを実装するうまい方法が何であるか疑問に思っていました。

私は、ソースをすべて最初に作成する必要があるため、適切なアクティビティを返すカスタムModelBinderを作成することを考えていました。これを行うためにフロントエンドにデータを格納する適切な方法は何でしょうか?あるいは、このアプローチは完全に間違っていますか?

アドバイスをいただければ幸いです!

答えて

0

私はこの質問を投稿して以来、しばらくしていますが、今私は解決策を投稿するフォームを完成しました。

フロントエンド部分はすでに質問自体に覆われていたとの要求で送信取得JSONは次のようになります。

{"Type":"Book","Details":{"Name":"Book1","Chapter":"1","StartPage":"5","EndPage":"23"}},{"Type":"WebPage","Details":{"Name":"Page1","Url":"sometesturl.com","PageTypeIDs":"1"}} 

に見られるように、このデータは、ICollectionを<ソース>にバインドされます質問。

文字列が複数のJSONオブジェクトを保持していますが、配列[]内にないため、JSONが有効なフォーマットになっていないという問題がありました。

C#では私はそうのようなすべてのデータをバインドするためのカスタムmodelbinderを作成しました:

public class ActivityTimerModelBinder : IModelBinder { } 

私はフォームデータを取得:

string sourcesJSON = request.Form.Get("Sources"); 

その後方法自体:

private List<Source> CreateSourcesFromJSON(string inputJSON) 
    { 
     List<Source> sources = new List<Source>(); 

     string validjson = "[" + inputJSON + "]"; 

     dynamic[] items = jsSerializer.Deserialize<dynamic>(validjson); 

     foreach (var item in items) 
     { 
      string type = item["Type"]; 

      string serialized = jsSerializer.Serialize(item["Details"]); 

      switch (type) 
      { 
       case "Book": 
        Book b = jsSerializer.Deserialize<Book>(serialized); 
        sources.Add(b); 
        break; 
       case "WebPage": 
        WebPage p = jsSerializer.Deserialize<WebPage>(serialized); 
        sources.Add(p); 
        break; 
       default: 
        break; 
      } 

     } 

     return sources; 
    } 

まだ、jsonのこの非直列化プロセスを改善する方法についての提案があれば、私は賞賛されるでしょう。

注:私はJSONに基づいてフォームを生成し(オプション)、その結果をJSONとしてHTML要素に出力するdynamicForm jQuery関数を作成しました。 ここにGitHubがあります:

github.com/noelheesen/jQuery.dynamicForm

関連する問題