[英]ASP.NET Webform fill bootstrap modal from code behind
I have a gridview in my page, and when Edit button is clicked, it will display a bootstrap modal, named modalEditPurchase , and display data. 我的页面中有一个gridview,单击“编辑”按钮时,它将显示一个名为modalEditPurchase的引导模式,并显示数据。 I have tried to populate the fields in the modal from code-behind but it didn't work, the fields are not populated. 我试图从代码的后面填充模式中的字段,但是它不起作用,没有填充字段。
Can anyone advise what I did wrong? 谁能告诉我我做错了什么?
Thank you in advance. 先感谢您。
HTML 的HTML
<div class="form-group">
<div class="col-md-2">
<a id="hypAddPurchase" data-toggle="modal" data-target="#modalAddPurchase" class="btn btn-primary" <%--style="float: left;"--%>>
<span class="glyphicon glyphicon-plus"></span> Add Purchase
</a>
</div>
</div>
<div class="form-group">
<div class="col-md-11">
<div class="container">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="gvDetails" runat="server" AutoGenerateColumns="false" CssClass="table table-bordered table-hover"
DataKeyNames="ID">
<Columns>
<asp:BoundField DataField="ID" HeaderText="Id" />
<asp:BoundField DataField="PRODUCT_CODE" HeaderText="Fund Code" />
<asp:BoundField DataField="PRODUCT_NAME" HeaderText="Fund Name" />
<asp:BoundField DataField="" HeaderText="Fund Currency" />
<asp:BoundField DataField="INVEST_AMT" HeaderText="Amount Invest" />
<asp:BoundField DataField="" HeaderText="Payment Currency" />
<asp:BoundField DataField="ENTRY_FEE_RATE" HeaderText="Entry Fee %" />
<asp:BoundField DataField="ENTRY_FEE_AMT" HeaderText="Entry Fee Amount" />
<asp:BoundField DataField="GST_RATE" HeaderText="GST %" />
<asp:BoundField DataField="GST_AMT" HeaderText="GST Amount" />
<asp:BoundField DataField="TRANS_AMT" HeaderText="Transaction Amount" />
<asp:BoundField DataField="FX_RATE" HeaderText="FX Rate" Visible="False" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" CommandName="Edit" data-toggle="modal" data-target="#modalEditPurchase" CssClass="btn btn-primary btn-sm" OnClick="OpenEdit_OnClick"><span class="glyphicon glyphicon-pencil"></span> Edit</asp:LinkButton>
<asp:LinkButton runat="server" CommandName="Delete" CssClass="btn btn-primary btn-sm"><span class="glyphicon glyphicon-minus"></span> Delete</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAdd" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</div>
</div>
</div>
<div class="modal fade" id="modalEditPurchase" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="modalEditPurchaseLabel">Edit Purchase</h4>
</div>
<div class="modal-body">
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Fund:</label>
</div>
<div class="col-md-5">
<asp:DropDownList class="form-control chosen-select_inModal" ID="ddlFundEdit" Width="400" runat="server"></asp:DropDownList>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Fund Currency:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" ID="txtFundCurrencyEdit" CssClass="form-control"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Amount Invest:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtAmountInvestEdit" CssClass="form-control" placeholder="00.00"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Payment Currency:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtPaymentCurrencyEdit" CssClass="form-control" placeholder="Payment Currency"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">FX Rate:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtFxRateEdit" CssClass="form-control" placeholder ="FX Rate"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Entry Fee %:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtEntryFeeRateEdit" CssClass="form-control" placeholder="Entry Fee Rate %"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Entry Fee:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtEntryFeeAmtEdit" CssClass="form-control" placeholder="00.00"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">GST %:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtGstRateEdit" CssClass="form-control" placeholder="GST Rate %"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">GST Amount:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtGstAmtEdit" CssClass="form-control" placeholder="00.00"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Trans Amount:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtTransAmtEdit" CssClass="form-control" placeholder="00.00"></asp:TextBox>
</div>
</ul>
</div>
<div class="modal-footer">
<asp:Button runat="server" CssClass="btn btn-primary" ID="btnEdit" Text="Update" UseSubmitBehavior="false" OnClick="btnEdit_Click"/>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="modalAddPurchase" tabindex="-1" role="dialog">
<div class="modal-dialog" style="width: 768px;">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="modalAddPurchaseLabel">Add Purchase</h4>
</div>
<div class="modal-body">
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Fund:</label>
</div>
<div class="col-md-5">
<asp:DropDownList class="form-control chosen-select_inModal" ID="ddlFundAdd" Width="400" runat="server"></asp:DropDownList>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Fund Currency:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" ID="txtFundCurrencyAdd" CssClass="form-control"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Amount Invest:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtAmountInvestAdd" CssClass="form-control" placeholder="Amount Invest"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Payment Currency:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtPaymentCurrencyAdd" CssClass="form-control" placeholder="Payment Currency"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">FX Rate:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtFxRateAdd" CssClass="form-control" placeholder ="FX Rate"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Entry Fee %:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtEntryFeeRateAdd" CssClass="form-control"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Entry Fee:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtEntryFeeAmtAdd" CssClass="form-control"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">GST %:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtGstRateAdd" CssClass="form-control"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">GST Amount:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtGstAmtAdd" CssClass="form-control"></asp:TextBox>
</div>
</ul>
<ul class="row">
<div class="col-md-4" align="right">
<label class="control-label">Trans Amount:</label>
</div>
<div class="col-md-5">
<asp:TextBox runat="server" id="txtTransAmtAdd" CssClass="form-control" placeholder="Transaction Amount"></asp:TextBox>
</div>
</ul>
</div>
<div class="modal-footer">
<asp:Button runat="server" CssClass="btn btn-primary" ID="btnAdd" Text="Add" UseSubmitBehavior="false" OnClick="btnAdd_Click" data-dismiss="modal"/>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
C# C#
protected void OpenEdit_OnClick(object sender, EventArgs e)
{
if (gvDetails.Rows.Count > 0)
{
GridViewRow row = gvDetails.SelectedRow;
ddlFundEdit.SelectedValue = row.Cells[1].Text;
txtFundCurrencyEdit.Text = row.Cells[3].Text;
txtAmountInvestEdit.Text = row.Cells[4].Text;
txtPaymentCurrencyEdit.Text = row.Cells[5].Text;
txtEntryFeeRateEdit.Text = row.Cells[6].Text;
txtEntryFeeAmtEdit.Text = row.Cells[7].Text;
txtGstRateEdit.Text = row.Cells[8].Text;
txtGstAmtEdit.Text = row.Cells[9].Text;
txtTransAmtEdit.Text = row.Cells[10].Text;
txtFxRateEdit.Text = row.Cells[11].Text;
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
int rowIndex = 0;
DataTable dtCurrentTable = new DataTable();
DataRow drCurrentRow = null;
if (ViewState["CurrentTable"] != null)
{
dtCurrentTable = (DataTable) ViewState["CurrentTable"];
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
// Extract current values in table
string id = gvDetails.Rows[rowIndex].Cells[0].Text;
string fund = gvDetails.Rows[rowIndex].Cells[1].Text;
string fundName = gvDetails.Rows[rowIndex].Cells[2].Text;
string fundCurrency = gvDetails.Rows[rowIndex].Cells[3].Text;
string amountInvest = gvDetails.Rows[rowIndex].Cells[4].Text;
string paymentCurrency = gvDetails.Rows[rowIndex].Cells[5].Text;
string entryFeeRate = gvDetails.Rows[rowIndex].Cells[6].Text;
string entryFeeAmount = gvDetails.Rows[rowIndex].Cells[7].Text;
string gstRate = gvDetails.Rows[rowIndex].Cells[8].Text;
string gstAmount = gvDetails.Rows[rowIndex].Cells[9].Text;
string transactionAmount = gvDetails.Rows[rowIndex].Cells[10].Text;
string fxRate = gvDetails.Rows[rowIndex].Cells[11].Text;
dtCurrentTable.Rows[i - 1]["ID"] = id;
dtCurrentTable.Rows[i - 1]["PRODUCT_CODE"] = fund;
dtCurrentTable.Rows[i - 1]["PRODUCT_NAME"] = fundName;
dtCurrentTable.Rows[i - 1]["FUND_CURRENCY"] = fundCurrency;
dtCurrentTable.Rows[i - 1]["INVEST_AMT"] = amountInvest;
dtCurrentTable.Rows[i - 1]["PAYMENT_CURRENCY"] = paymentCurrency;
dtCurrentTable.Rows[i - 1]["ENTRY_FEE_RATE"] = entryFeeRate;
dtCurrentTable.Rows[i - 1]["ENTRY_FEE_AMT"] = entryFeeAmount;
dtCurrentTable.Rows[i - 1]["GST_RATE"] = gstRate;
dtCurrentTable.Rows[i - 1]["GST_AMT"] = gstAmount;
dtCurrentTable.Rows[i - 1]["TRANS_AMT"] = transactionAmount;
dtCurrentTable.Rows[i - 1]["FX_RATE"] = fxRate;
rowIndex++;
}
}
}
else
{
dtCurrentTable.Columns.Add("ID", typeof(string));
dtCurrentTable.Columns.Add("PRODUCT_CODE", typeof(string));
dtCurrentTable.Columns.Add("PRODUCT_NAME", typeof(string));
dtCurrentTable.Columns.Add("FUND_CURRENCY", typeof(string));
dtCurrentTable.Columns.Add("INVEST_AMT", typeof(string));
dtCurrentTable.Columns.Add("PAYMENT_CURRENCY", typeof(string));
dtCurrentTable.Columns.Add("ENTRY_FEE_RATE", typeof(string));
dtCurrentTable.Columns.Add("ENTRY_FEE_AMT", typeof(string));
dtCurrentTable.Columns.Add("GST_RATE", typeof(string));
dtCurrentTable.Columns.Add("GST_AMT", typeof(string));
dtCurrentTable.Columns.Add("TRANS_AMT", typeof(string));
dtCurrentTable.Columns.Add("FX_RATE", typeof(string));
}
drCurrentRow = dtCurrentTable.NewRow();
drCurrentRow["ID"] = rowIndex + 1;
drCurrentRow["PRODUCT_CODE"] = ddlFundAdd.SelectedValue;
drCurrentRow["PRODUCT_NAME"] = ddlFundAdd.SelectedItem.Text;
drCurrentRow["FUND_CURRENCY"] = txtFundCurrencyAdd.Text;
drCurrentRow["INVEST_AMT"] = txtAmountInvestAdd.Text;
drCurrentRow["PAYMENT_CURRENCY"] = txtPaymentCurrencyAdd.Text;
drCurrentRow["ENTRY_FEE_RATE"] = txtEntryFeeRateAdd.Text;
drCurrentRow["ENTRY_FEE_AMT"] = txtEntryFeeAmtAdd.Text;
drCurrentRow["GST_RATE"] = txtGstRateAdd.Text;
drCurrentRow["GST_AMT"] = txtGstAmtAdd.Text;
drCurrentRow["TRANS_AMT"] = txtTransAmtAdd.Text;
drCurrentRow["FX_RATE"] = txtFxRateAdd.Text;
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
BindGrid();
}
protected void BindGrid()
{
if (ViewState["CurrentTable"] != null)
{
gvDetails.DataSource = ViewState["CurrentTable"] as DataTable;
}
else
{
gvDetails.DataSource = null;
}
gvDetails.DataBind();
}
Everything should be inside the asp:UpdatePanel
tag, even the modal <div class="modal fade" ...>
. 一切都应该在asp:UpdatePanel
标记内,甚至是模态<div class="modal fade" ...>
。 That should work. 那应该工作。
That's the way UpdatePanels work: when a server call is triggered , only their ContentTemplate
area is updated (even when you try to update other parts of the page). 这就是UpdatePanels的工作方式: 触发服务器调用时,仅更新其ContentTemplate
区域(即使尝试更新页面的其他部分)。
EDIT 编辑
I think there's a problem with the UpdatePanel's trigger: it should be directed to the grid's click event, but currently it doesn't seem to be the case. 我认为UpdatePanel的触发器存在问题:应将其定向到网格的click事件,但目前看来并非如此。
The Edit button already has a command configured: CommandName="Edit"
, so you need to capture the OnRowCommand
event of the grid, like this: “编辑”按钮已经配置了一个命令: CommandName="Edit"
,因此您需要捕获网格的OnRowCommand
事件,如下所示:
<asp:GridView ID="gvDetails" ... OnRowCommand="grid_RowCommand">
also change the UpdatePanel's trigger, like this: 还可以更改UpdatePanel的触发器,如下所示:
<asp:AsyncPostBackTrigger ControlID="gvDetails" EventName="OnRowCommand" />
and in code behind: 并在后面的代码中:
protected void grid_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Edit")
{
// your current OpenEdit_OnClick code
}
}
GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
现在从行中获取数据。
Just to update and let you know that I have managed to solve this issue earlier. 只是进行更新,让您知道我已经设法解决了这个问题。
1) I changed the LinkButton in the gridview to Button 1)我将gridview中的LinkButton更改为Button
2) Added this in the OnEdit_Click: 2)在OnEdit_Click中添加了它:
Button btn = sender as Button;
GridViewRow row = btn.NamingContainer as GridViewRow;
string id = gvDetails.DataKeys[row.RowIndex].Values[0].ToString();
3) Put modalEditPurchase inside an UpdatePanel 3)将modalEditPurchase放在UpdatePanel中
4) Populate the modalEditPurchase using the id. 4)使用ID填充modalEditPurchase。
Thank you everyone for your help. 感谢大家的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.