PDA

View Full Version : سوال: چه کنیم فرم Modal با پست بک صفحه بسته نشود.



اوبالیت به بو
سه شنبه 06 مرداد 1394, 13:19 عصر
درود بر شما

من فرم Modal بوت استرپ را به این صورت نمایش می دم:


<div class="modal fade" id="myModal" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<asp:UpdatePanel ID="upModal" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">
<asp:Label ID="lblModalTitle" runat="server" Text=""></asp:Label></h4>
</div>
<div class="modal-body">
<asp:HiddenField ID="hfProcessId" runat="server" />
<asp:HiddenField ID="hfOldProcessCode" runat="server" />
<asp:HiddenField ID="hfOldProcessName" runat="server" />
<div class="alert alert-block alert-info">
<button type="button" class="close" data-dismiss="alert">
<i class="icon-remove"></i>
</button>
<i class="icon-ok blue"></i>
در این صفحه یک <strong class="blue"> فرآیند </strong> را <strong>ویرایش</strong> نمایید.
</div>
<div id="AlertDangerU" runat="server" visible="false" class="alert alert-block alert-danger">
<button type="button" class="close" data-dismiss="alert">
<i class="icon-remove"></i>
</button>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
</div>
<div class="row">
<div class="span3">
<asp:Label ID="Label1" runat="server" Text="استانداردها" AssociatedControlID="cblStandardsTypes"></asp:Label>
<asp:CheckBoxList ID="chkStandardsTypesU" runat="server" RepeatColumns="3"
CellPadding="15" CellSpacing="15" />
</div>
<div class="span1"></div>
<div class="span5">
<div class="row">
<div class="span2">گروه بندی فرآیند:</div>
<div class="span3">
<asp:DropDownList ID="ddlProcessCategoriesU" runat="server" ValidationGroup="Update" ></asp:DropDownList>
<asp:RequiredFieldValidator ID="rfvProcessCategoriesU" runat="server" ControlToValidate="ddlProcessCategoriesU" InitialValue="-1" ValidationGroup="Update" ErrorMessage="گروه بندی فرآیند را انتخاب نمایید.">
<img src="../../Assets/RTL/images/ico-alert.png" />
</asp:RequiredFieldValidator>
</div>
</div>
<div class="row">
<div class="span2">عنوان فرآیند:</div>
<div class="span3">
<asp:TextBox ID="txtProcessNameU" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvProcessNameU" runat="server" ControlToValidate="txtProcessNameU" ValidationGroup="Update" ErrorMessage="عنوان فرآیند را انتخاب نمایید.">
<img src="../../Assets/RTL/images/ico-alert.png" />
</asp:RequiredFieldValidator>
</div>
</div>
<div class="row">
<div class="span2">کد فرآیند:</div>
<div class="span3">
<asp:TextBox ID="txtProcessCodeU" runat="server" ValidationGroup="Update" ></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvProcessCodeU" runat="server" ControlToValidate="txtProcessCodeU" ValidationGroup="Update" ErrorMessage="کد فرآیند را انتخاب نمایید.">
<img src="../../Assets/RTL/images/ico-alert.png" />
</asp:RequiredFieldValidator>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<asp:Button ID="btnUpdate" runat="server" CssClass="btn btn-small btn-success" Text="ذخیره" ValidationGroup="Update" OnClick="btnUpdate_Click" />
<asp:Button ID="btnBack" runat="server" CssClass="btn btn-small btn-danger" Text="انصراف" CausesValidation="false" OnClick="btnBack_Click" />
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>



و در سمت سرور به این صورت فراخوانی می شود:


lblModalTitle.Text = "ویرایش فرآیند";
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "myModal", "$('#myModal').modal();", true);
upModal.Update();

حالا در کد دکمه btnUpdate که درون Modal طراحی شده نوشتیم که فرم اعتبار سنجی بشه و اگر عنوان تکراری بود یک Div که حامل پیغام خطا به همراه Validate Summary و یک رنگ هست رو نشون بده:

protected void btnUpdate_Click(object sender, EventArgs e)
{
if (hfOldProcessName.Value != txtProcessNameU.Text.Replace("ی", "ي").Replace("ک", "ك"))
{
if (DAL.Classes.Processes.SelectByProcessName(
txtProcessNameU.Text.Replace("ی", "ي").Replace("ک", "ك")).Tables[0].Rows.Count > 0)
{
ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);

var err = new CustomValidator();
err.ValidationGroup = "Update";
err.IsValid = false;
err.ErrorMessage = "این عنوان فرآیند قبلا در سیستم ثبت شده است";
Page.Validators.Add(err);
AlertDangerU.Visible = true;
//return;
}
else
{
Update();
}
}
else
{
Update();
}
}



حالا مساله اینجاست که تمام این رویداد انجام میشه اما فرم Modal بسته میشه و اجازه نمایش پیغام رو به کاربر نمیده و به حالت اولیه برمی گرده. ما چه کار کنیم که فرم Modal همچنان باز بمونه و اون div که اسمش AlterDanger هست رو نشون بده؟

اوبالیت به بو
پنج شنبه 08 مرداد 1394, 08:59 صبح
به روز رسانی

اوبالیت به بو
شنبه 10 مرداد 1394, 11:40 صبح
به روز رسانی

اوبالیت به بو
یک شنبه 11 مرداد 1394, 18:12 عصر
ابتدا این سطر رو حذف کنید:


ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);

و بعد در دکمه مورد نظر این سطر ها رو که قبلا در RowCommand کنترل GridView نوشته بود را تکرار کنید:



var err = new CustomValidator();
err.ValidationGroup = "Update";
err.IsValid = false;
err.ErrorMessage = "این عنوان فرآیند قبلا در سیستم ثبت شده است";
Page.Validators.Add(err);
AlertDangerU.Visible = true;

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "myModal", "$('#myModal').modal();", true);
upModal.Update();



یک سروسامانی باید این سایت بگیره. شکست در انتظاره.