チュートリアルから jQuery のサンプル コードを入手しました。これは単一の Web フォーム サンプルでもあります。
プロジェクトに統合してコンテンツ ページで使用すると、JavaScript が機能しません。
これは私のマスターページコードです:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebApplication2.Site1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
これは私のコンテンツページのコードです:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true"
CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<!-- from http://encosia.com/2009/10/11/do-you-know-about-this-undocumented-google-cdn-feature/ -->
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/start/jquery-ui.css"
type="text/css" rel="Stylesheet" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
<script type="text/javascript" src="<%= ResolveUrl("~")%>Scripts/jquery.blockUI.js"></script>
<script type="text/javascript" src="<%= ResolveUrl("~") %>Scripts/ScriptFile.js"></script>
<!-- fix for 1.1em default font size in Jquery UI -->
<style type="text/css">
.ui-widget
{
font-size: 11px !important;
}
.ui-state-error-text
{
margin-left: 10px;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
$("#divEditCustomer").dialog({
autoOpen: false,
modal: true,
minHeight: 20,
height: 'auto',
width: 'auto',
resizable: false,
open: function(event, ui) {
$(this).parent().appendTo("#divEditCustomerDlgContainer");
},
});
});
function closeDialog() {
//Could cause an infinite loop because of "on close handling"
$("#divEditCustomer").dialog('close');
}
function openDialog(title, linkID) {
var pos = $("#" + linkID).position();
var top = pos.top;
var left = pos.left + $("#" + linkID).width() + 10;
$("#divEditCustomer").dialog("option", "title", title);
$("#divEditCustomer").dialog("option", "position", [left, top]);
$("#divEditCustomer").dialog('open');
}
function openDialogAndBlock(title, linkID) {
openDialog(title, linkID);
//block it to clean out the data
$("#divEditCustomer").block({
message: '<img src="<%=ResolveUrl("~") %>content/images/async.gif" />',
css: { border: '0px' },
fadeIn: 0,
//fadeOut: 0,
overlayCSS: { backgroundColor: '#ffffff', opacity: 1 }
});
}
function unblockDialog() {
$("#divEditCustomer").unblock();
}
function onTest() {
$("#divEditCustomer").block({
message: '<h1>Processing</h1>',
css: { border: '3px solid #a00' },
overlayCSS: { backgroundColor: '#ffffff', opacity: 1 }
});
}
</script>
<asp:ScriptManager ID="scriptManager" runat="server" />
<h1>
Customers</h1>
<div id="divEditCustomerDlgContainer">
<div id="divEditCustomer" style="display: none">
<asp:UpdatePanel ID="upnlEditCustomer" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="phrEditCustomer" runat="server">
<table cellpadding="3" cellspacing="1">
<tr>
<td>
*First Name:
</td>
<td>
<asp:TextBox ID="txtFirstName" Columns="40" MaxLength="50" runat="server" />
<asp:RequiredFieldValidator ID="vtxtFirstName" runat="server" EnableClientScript="false"
CssClass="ui-state-error-text" Display="Dynamic" ErrorMessage="Required." ControlToValidate="txtFirstName" />
</td>
</tr>
<tr>
<td>
*Last Name:
</td>
<td>
<asp:TextBox ID="txtLastName" Columns="40" MaxLength="50" runat="server" />
<asp:RequiredFieldValidator ID="vtxtLastName" runat="server" EnableClientScript="false"
CssClass="ui-state-error-text" Display="Dynamic" ErrorMessage="Required." ControlToValidate="txtLastName" />
</td>
</tr>
<tr>
<td>
*Email:
</td>
<td>
<asp:TextBox ID="txtEmail" Columns="40" MaxLength="50" runat="server" />
<asp:RequiredFieldValidator ID="vtxtEmail" runat="server" EnableClientScript="false"
CssClass="ui-state-error-text" Display="Dynamic" ErrorMessage="Required." ControlToValidate="txtEmail" />
<asp:RegularExpressionValidator ID="vtxtEmail2" runat="server" EnableClientScript="false"
CssClass="ui-state-error-text" ControlToValidate="txtEmail" ValidationExpression=".*@.*\..*"
ErrorMessage="Not a valid email." Display="Dynamic" />
</td>
</tr>
<tr>
<td>
Phone:
</td>
<td>
<asp:TextBox ID="txtPhone" Columns="20" MaxLength="20" runat="server" />
</td>
</tr>
<tr>
<td>
Date of Birth:
</td>
<td>
<asp:TextBox ID="txtDateOfBirth" Columns="10" MaxLength="20" runat="server" />
<asp:CompareValidator ID="vtxtDateOfBirth" runat="server" EnableClientScript="false"
CssClass="ui-state-error-text" ControlToValidate="txtDateOfBirth" ErrorMessage="Not a valid date."
Operator="DataTypeCheck" Type="Date" />
</td>
</tr>
<tr>
<td colspan="2" align="right">
<asp:Button ID="btnSave" OnClick="btnSave_Click" Text="Save" runat="server" />
<asp:Button ID="btnCancel" OnClick="btnCancel_Click" OnClientClick="closeDialog()"
CausesValidation="false" Text="Cancel" runat="server" />
</td>
</tr>
</table>
</asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
<!-- divEditCustomerDlgContainer -->
<!--
<br /><br />
<input type="button" id="btnTest" onclick="onTest" value="Test" />
<br /><br />
-->
<asp:UpdatePanel ID="upnlCustomers" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:LinkButton ID="btnAddCustomer" Text="Add Customer" runat="server" OnClientClick="openDialogAndBlock('Add Customer', 'btnAddCustomer')"
CausesValidation="false" OnClick="btnAddCustomer_Click"></asp:LinkButton>
<br />
<br />
<asp:GridView ID="gvCustomers" runat="server" AutoGenerateColumns="False" CellPadding="4"
CellSpacing="1" OnRowDataBound="gvCustomer_RowDataBound" OnRowCommand="gvCustomers_RowCommand">
<Columns>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<%# Eval("FirstName") + " " + Eval("LastName")%>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Phone" HeaderText="Phone" />
<asp:BoundField DataField="Email" HeaderText="Email" />
<asp:BoundField DataField="DateOfBirth" HeaderText="Date Of Birth" DataFormatString="{0:MMMM d, yyyy}" />
<asp:TemplateField HeaderText="Actions">
<ItemTemplate>
<asp:LinkButton ID="btnEdit" Text="Edit" CommandName="EditCustomer" CausesValidation="false"
CommandArgument='<%#Eval("ID")%>' runat="server"></asp:LinkButton>
<asp:LinkButton ID="btnDelete" Text="Delete" CommandName="DeleteCustomer" CausesValidation="false"
CommandArgument='<%#Eval("ID")%>' runat="server"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:LinkButton ID="btnRefreshGrid" CausesValidation="false" OnClick="btnRefreshGrid_Click"
Style="display: none" runat="server"></asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upnlJsRunner" UpdateMode="Always" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="phrJsRunner" runat="server"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript" src="Content/scripts/ScriptFile.js">
</script>
サンプルでは、すべての script タグと style タグが head タグ内に配置されています。コンテンツ ページのプロジェクトで機能させるにはどうすればよいですか?
編集:
実際、これはデータに対して基本的な追加、編集、および削除機能を実行する jQuery ダイアログの例です (お客様)
現在の問題は、リンク ボタン「btnAddCustomer」をクリックしてもダイアログ ボックスが表示されないことです。これはおそらく JavaScript が実行されていないためですが、RowCommand を使用してグリッドビューの編集ボタンを押すと、ダイアログ ボックスが表示される可能性があります。
私の質問をより明確にするために、コードビハインドを次に示します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication2
{
public partial class WebForm1 : System.Web.UI.Page
{
private CustomerService _customerService;
#region Properties
private bool IsAdd
{
get
{
return (!EditCustomerID.HasValue);
}
}
private int? EditCustomerID
{
get
{
return (int?)ViewState["EditCustomerID"];
}
set
{
ViewState["EditCustomerID"] = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
_customerService = new CustomerService();
if (!IsPostBack)
{
GridDataBind();
}
}
private void GridDataBind()
{
gvCustomers.DataSource = _customerService.GetAll();
gvCustomers.DataBind();
}
protected void btnAddCustomer_Click(object sender, EventArgs e)
{
this.EditCustomerID = null;
ClearEditCustomerForm(); //In case using non-modal
RegisterStartupScript("jsUnblockDialog", "unblockDialog();");
}
private void ClearEditCustomerForm()
{
//Empty out text boxes
var textBoxes = new List<Control>();
FindControlsOfType(this.phrEditCustomer, typeof(TextBox), textBoxes);
foreach (TextBox textBox in textBoxes)
textBox.Text = "";
//Clear validators
var validators = new List<Control>();
FindControlsOfType(this.phrEditCustomer, typeof(BaseValidator), validators);
foreach (BaseValidator validator in validators)
validator.IsValid = true;
}
static public void FindControlsOfType(Control root, Type controlType, List<Control> list)
{
if (root.GetType() == controlType || root.GetType().IsSubclassOf(controlType))
{
list.Add(root);
}
//Skip input controls
if (!root.HasControls())
return;
foreach (Control control in root.Controls)
{
FindControlsOfType(control, controlType, list);
}
}
protected void gvCustomer_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.DataItem == null)
return;
var btnEdit = (LinkButton)e.Row.FindControl("btnEdit");
btnEdit.OnClientClick = "openDialogAndBlock('Edit Customer', '" + btnEdit.ClientID + "')";
}
protected void gvCustomers_RowCommand(object sender, GridViewCommandEventArgs e)
{
int customerID = Convert.ToInt32(e.CommandArgument);
switch (e.CommandName)
{
//Can't use just Edit and Delete or need to bypass RowEditing and Deleting
case "EditCustomer":
Customer customer = _customerService.GetByID(customerID);
FillEditCustomerForm(customer);
this.EditCustomerID = customerID;
RegisterStartupScript("jsUnblockDialog", "unblockDialog();");
//Setting timer to test longer loading
//Thread.Sleep(2000);
break;
case "DeleteCustomer":
_customerService.Delete(customerID);
GridDataBind();
break;
}
}
private void FillEditCustomerForm(Customer customer)
{
txtFirstName.Text = customer.FirstName;
txtLastName.Text = customer.LastName;
txtEmail.Text = customer.Email;
txtPhone.Text = customer.Phone;
txtDateOfBirth.Text = customer.DateOfBirth.HasValue ? customer.DateOfBirth.Value.ToShortDateString() : "";
}
private void TriggerClientGridRefresh()
{
string script = "__doPostBack(\"" + btnRefreshGrid.ClientID + "\", \"\");";
RegisterStartupScript("jsGridRefresh", script);
}
private void RegisterStartupScript(string key, string script)
{
ScriptManager.RegisterStartupScript(phrJsRunner, phrJsRunner.GetType(), key, script, true);
}
protected void btnSave_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
return;
Customer customer;
if (this.IsAdd)
customer = new Customer();
else
customer = _customerService.GetByID(this.EditCustomerID.Value);
customer.FirstName = txtFirstName.Text;
customer.LastName = txtLastName.Text;
customer.Email = txtEmail.Text;
customer.Phone = txtPhone.Text;
if (!String.IsNullOrEmpty(txtDateOfBirth.Text))
customer.DateOfBirth = DateTime.Parse(txtDateOfBirth.Text);
if (this.IsAdd)
_customerService.Add(customer);
else
_customerService.Update(customer);
HideEditCustomer();
TriggerClientGridRefresh();
}
private void HideEditCustomer()
{
ClearEditCustomerForm();
RegisterStartupScript("jsCloseDialg", "closeDialog();");
}
protected void btnCancel_Click(object sender, EventArgs e)
{
HideEditCustomer();
}
protected void btnRefreshGrid_Click(object sender, EventArgs e)
{
GridDataBind();
}
}
}