2016-06-14 2 views
0

実際にアプリケーションフォーム用の空のダイアログボックスを作成するユーザーコントロールを作成しました。私はボタンのクリックイベントに対してこのユーザコントロールをレンダリングしたかったのです(部分ビューをレンダリングするようなものです)。 .aspxページにはボタンが含まれています。ボタンをクリックすると、ダイアログを作成するユーザーコントロールが開きます。以下は、ユーザーコントロールのダイアログを開くために書かれたjqueryのコードです:ボタンのクリックイベントでユーザーコントロールをレンダリングできますか?

jQueryが

createAliasPopUpForm: function (rowNumberId) { 
    // debugger; 
    var self = this; 
    var dat = $("input[id*='hdnAliasRecordmetaData']").val(); 
    self.metaDataColumns = JSON.parse(dat); 
    //debugger; 
    // now bind update data to pop up 
    if (self.metaDataColumns.length > 0) { 

     if (rowNumberId != 'undefined' && rowNumberId != null) { 
      self.rowNumber = rowNumberId; 
      // fill alias record to meta data 
      var listdata = $("input[id*='hdnAliasRecordList']").val(); 
      var aliasList = JSON.parse(listdata); 
      if (aliasList.Rows.length > 0) { 
       $.each(aliasList.Rows, function (i, val) { 
        if (this.RowNumber == rowNumberId) { 
         self.fillAliasRecord(self.metaDataColumns, this.Columns); 
         return false; 
        } 
       }); 
      } 

     } 
     else { 
      // right now cloumn list has MDM record value so need to clear that value only 
      $.each(self.metaDataColumns, function (i, val) { 
       this.Value = ''; 
      }); 
     } 



     // sort array 
     //self.metaDataColumns.sort(common.dynamicSortMultiple("GroupOrder", "MetadataId")); 
     self.metaDataColumns.sort(common.dynamicSortMultiple("GroupOrder", "ColumnNumber")); 
     self.createPopupHtml(self.metaDataColumns, rowNumberId); 
     self.init(); 

     $('#popUpHeader').find('h4').remove(); 
     $('#popUpHeader').append(' <h4 class="modal-title" >Alias Record</h4>'); 
     $("#updateConfirmPopUp").dialog({ 
      autoOpen: true, 
      width: 600, 
      resizable: false, 
      draggable: false, 
      modal: true, 
      show: { effect: 'blind' } 
     }); 
    } 



}, 

ユーザーコントロールファイルの背後にあるコードは、ちょうどloadイベントが含まれてい

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AddAlias.ascx.cs" Inherits="OCM.Phoenix.WebToolsFramework.Server.Modules.MDMAdmin.AddAlias" %> 
<script language="javascript" type="text/javascript" src='<%= ResolveClientUrl("~/scripts/jquery-1.4.2.min.js") %>'></script> 
<script language="javascript" src="../Scripts/jquery.js" type="text/javascript"></script> 
<script language="javascript" src="../Scripts/jquery-ui.js" type="text/javascript"></script> 
<script language="javascript" src="../Scripts/bootstrap.min.js" type="text/javascript"></script> 
<script language="javascript" src="../Scripts/Common.js" type="text/javascript"></script> 
<script language="javascript" src="../Scripts/AdminEdit.js" type="text/javascript"></script> 

<asp:HiddenField ID="hdnAliasRecordmetaData" runat="server" /> 
<asp:HiddenField ID="hdnAliasRecordList" runat="server" /> 
<script> 
$(function() { 
    adminEditForm.createAliasPopUpForm(); 
}); 
</script> 

aspxページ

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="AddAliasPage.aspx.cs" Inherits="Modules_MDMDataHub_AddAliasPage" %> 

<%@ Register Src="UserControls/AddAlias.ascx" TagPrefix="uc" TagName="alias" %> 
<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<script src="Scripts/jquery.js"></script> 
<script src="Scripts/jquery-ui.js"></script> 
<script src="Scripts/AdminEdit.js"></script> 

<body> 
    <form id="form1" runat="server"> 
     <div> 
      <uc:alias ID="alias" runat="server" /> 
      <br /> 

      <asp:button ID="btn1" OnClick="btn1_Click" runat="server"> </asp:button> 

     </div> 
    </form> 
</body> 
</html> 

私はボタンのクリックイベントを作成しましたが、以下の関数を呼び出してユーザーコントロールのhtmlをレンダリングしました。 hdnmetadatatalueがフォームタグの中になければならないので、それは私にエラーを与え続けます。私はそれをしましたが、まだ私はエラーを取得します。ここで何か間違っているのですか?私はあなたがユーザーコントロールであった場合、ページがformタグの例外が発生しますHTMLのレンダリングにユーザーコントロールのためのRenderControlメソッドを呼び出ししようとしていると仮定し

var ctrl = (AddAlias)p.LoadControl("~/Modules/MDMDataHub/UserControls/AddAlias.ascx"); 
// ... other lines 
ctrl.RenderControl(htmlWriter); 

:あなたのコードを見直すことで

private string RenderControl() 
{ 
    var sb = new System.Text.StringBuilder(); 
    using (var stWriter = new System.IO.StringWriter(sb)) 
    using (var htmlWriter = new HtmlTextWriter(stWriter)) 
    { 
     var p = new Page(); 

     var ctrl = (AddAlias)p.LoadControl("~/Modules/MDMDataHub/UserControls/AddAlias.ascx"); 
     ctrl.Visible = true; 

     // do your own init logic if needed 

     p.Controls.Add(ctrl); 
     ctrl.RenderControl(htmlWriter); 
     return sb.ToString(); 
    } 
} 

答えて

0

を助けてください定義されたフォームタグの外側にrunat="server"でレンダリングされます。

使用の背後にあるページのコード上のPage.VerifyRenderingInServerFormメソッドのすべてのユーザーコントロールが適切にレンダリング確保するために:

public override void VerifyRenderingInServerForm(Control control) { 
    // nothing to override here 
} 

public override boolean EnableEventValidation { 
    get { return false; } 
} 

参考:UserControl's RenderControl is asking for a form tag in (C# .NET)

関連する問題