2016-05-09 5 views
2

DOTNETNUKE CMSのMVCフレームワークを使用してモジュールを構築する方法についての明確かつ例示的な文書を見つけるために、ここ2日間は苦労しました。DNN MVCテンプレート - モジュールの開発方法に関する良いドキュメントはありますか?

このサイズのCMSの場合、最初にMVCをサポートしていることをアプリデベロッパーに宣伝することは非常に残念ですが、次に始めるにはとてもシンプルなフォームを作成する方法についてはごくわずかです。

これは私が今までに達成したものです。私は基本的にご連絡フォームを作成しようとしています:

  1. は、コントローラのアクションビューを設定

    // GET: FormEntry Index .. 
    [ModuleAction(ControlKey = "Add", TitleKey = "AddItem")] 
    public ActionResult Index() 
    { 
        return View(); 
    } 
    
    
    
    [HttpPost] // POST: 
    [ActionName("FormEntry")] 
    
    public string Post(FormEntry formEntry) 
    { 
        try 
        { 
         if (ModelState.IsValid) 
         { 
          FormEntryManager.Instance.CreateItem(formEntry); 
         } 
         return "success"; 
        } 
        catch(Exception ex) 
        { 
         return "error"; 
        } 
    
    } 
    
  2. を設定します。

    <div id="[email protected]"> 
    
        <form id="formcontactus"> 
         @*@Html.ValidationSummary(true)*@ 
    
         <fieldset> 
          <div class="dnnFormItem"> 
           <div><label for="itemName">@Dnn.LocalizeString("lblName")</label></div> 
           @Html.TextBoxFor(m => m.VisitorName) 
           @Html.ValidationMessageFor(m => m.VisitorName, @Dnn.LocalizeString("VisitorNameRequired")) 
          </div> 
          <div class="dnnFormItem"> 
           <div><label for="itemDescription">@Dnn.LocalizeString("lblVisitorEmail")</label></div> 
           @Html.TextBoxFor(m => m.VisitorEmail) 
           @Html.ValidationMessageFor(m => m.VisitorEmail, @Dnn.LocalizeString("VisitorEmailRequired")) 
          </div> 
          <div class="dnnFormItem"> 
           <div><label for="itemDescription">@Dnn.LocalizeString("lblPhone")</label></div> 
           @Html.TextBoxFor(m => m.VisitorPhone) 
          </div> 
          <div class="dnnFormItem"> 
           <div><label for="itemDescription">@Dnn.LocalizeString("lblMessage")</label></div> 
           @Html.TextAreaFor(m => m.VisitorMessage) 
           @Html.ValidationMessageFor(m => m.VisitorMessage, @Dnn.LocalizeString("VisitorMessageRequired")) 
          </div> 
    
          @Html.HiddenFor(m => m.ModuleId) 
         </fieldset> 
    
         <button id="btnSumbit" type="button" class="dnnPrimaryAction">@Dnn.LocalizeString("Submit")</button> 
         <a id="cancelEdit" href="#" class="dnnSecondaryAction">@Dnn.LocalizeString("Cancel")</a> 
        </form> 
    
    </div> 
    

マイindexビューが正常にレンダリングさん、と私は自分のフォームを見ることができます。問題は、このデータをMVC Postメソッドに投稿する方法を理解することにあります。また、私のモーダルクラスの検証のための私のデータ注釈はクライアント側では機能しません。

PostメソッドでjQuery Ajaxを使用して投稿を試みましたが、内部エラーがスローされます。

DNNコミュニティからのご意見をお待ちしております。

+0

MVCモジュールの開発のための私たちが持っている公式ドキュメントはhttp://www.dnnsoftware.com/docs/developers/about-modules/mvc-module-development.htmlです。また、ブログ、コミュニティプロジェクト、テーマをカバーするDNNHero.comのチュートリアルもあります。また、私の答えのサンプルMVCプロジェクトは、少なくとも実際の例を示しています。あなたはこれらのリソースをさらに手に入れましたか? – DotNetNuclear

+0

@DotNetNuclear:応答してくれてありがとう。今週の週末に私の仕事を再開させていただきます。私のポイントは、例えば私が推測する.dnnファイルはRouteConfig.csの代わりに(asp.net MVCに反対する)ルーティングに使用されています。これはどこに説明されていますか?検証はクライアント側とサーバー側でどのように機能しますか?検証のためのモーダルクラスのデータアノテーションは、クライアント側の検証にどのように結びついていますか?私はAndroidデベロッパー+ウェブデベロッパーです。他のフレームワークでは成熟したドキュメントが表示されますが、DNNでは表示されません – user3276940

答えて

1

良いDNN8 MVCモジュールのサンプルプロジェクトは、Restaurant Menu MVC projectです。これはgithubからダウンロードできます。

マイ編集ビューとコントローラには、チェックアウト可能な作業確認付きのフォームフィールドがあります。

送信ボタンがクリックされると、コントローラメソッドに入力されていることを確認します(アクションメソッドに基づいてビューがFormEntryと呼ばれていると仮定します)。

また、投稿を処理するアクションメソッドは、文字列ではなく、アクション結果を返す必要があります。

私のポストハンドラでは、ModelState.IsValidがtrueの場合にフォームデータを保持した後にRedirectToRouteResultを返します。そうでなければ、検証を実行する同じモデルで現在のViewを返します。

[HttpPost] 
[DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken] 
public ActionResult Edit(MenuItem item) 
{ 
    if (ModelState.IsValid) 
    { 
     //Persist form information 

     //Go to default view (Index) 
     return RedirectToDefaultRoute(); 
    } 

    // Return to my edit view if there was an error. 
    return View(item); 
} 
関連する問題