ورود

View Full Version : بدون اژاکس اره با اون نچ!



rational unified process
شنبه 14 دی 1392, 00:07 صبح
سلام
برنامه زیر رو در نظر بگیرید.برنامه بدون بکارگیری اژاکس مشکلی نداره ولی با اژاکس کار نمیکنه.چرا؟
صفحه کد بیهاند یوزر کنترل رو نگاه کنید و بریک پوینت بذارید(در حالتی که از ScriptManagerProxy استفاده میکنید) خواهید دید که شرط fileOK محقق نمیشه بلکه دستور

else
{
lblResult.Text = "مجاز به استفاده از این فرمت عکس نیستید یا اندازه عکس بیش از یک مگابایت است";
}

محقق میشه چرا؟
به عبارت واضحتر چرا FileUpload1.HasFile فالز است؟

<%@ Page Language="C#‎" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>


<%@ Register src="admin/addproductions.ascx" tagname="Product" tagprefix="uc1" %>

<!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>Untitled Page</title>

</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<%--<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>--%>

<uc1:Product ID="Product1" runat="server" />
</div>

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





<%@ Control Language="C#‎" AutoEventWireup="true" CodeFile="AddProductions.ascx.cs" Inherits="Admin_AddProductions" %>
<!------------------------------------------------------------------------>
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
</asp:ScriptManagerProxy>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<!------------------------------------------------------------------------>
<div align="center" dir="rtl">
<table>
<tr>
<td>
<asp:Label ID="Label2" runat="server" Text="ای دی دسته بندی محصول"></asp:Label>
</td>
<td>
<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource1"
DataTextField="CategoryName" DataValueField="CategoryID">
</asp:DropDownList>
</td>
</tr>
<tr>
<td>
<asp:Label ID="Label3" runat="server" Text="نام محصول"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtProName" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtProName"
Display="Dynamic" ErrorMessage="نام محصول را وارد نکرده اید" SetFocusOnError="True">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>
<asp:Label ID="Label4" runat="server" Text="قیمت"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtCast" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtCast"
Display="Dynamic" ErrorMessage="قیمت را وارد نکرده اید" SetFocusOnError="True">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>
<asp:Label ID="Label5" runat="server" Text="عکس یا فیلم"></asp:Label>
</td>
<td>
<asp:FileUpload ID="FileUpload1" runat="server" />
</td>
</tr>
<tr>
<td>
<asp:Label ID="Label6" runat="server" Text="توضیحات"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtComment" runat="server" TextMode="MultiLine"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtComment"
Display="Dynamic" ErrorMessage="توضیحات را وارد نکرده اید" SetFocusOnError="True">*</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>
<asp:Label ID="Label7" runat="server" Text="موجودی"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtStock" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="txtStock"
Display="Dynamic" ErrorMessage="موجودی را وارد نکرده اید" SetFocusOnError="True">*</asp:RequiredFieldValidator>
</td>
</tr>
</table>
<br />
<!---------------------->
<%-- <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager> --%>
<%--<asp:HtmlEditorExtender ID="HtmlEditorExtender1" runat="server" TargetControlID="txtComment">
</asp:HtmlEditorExtender>--%>
<!------------------------------------------------------------------------>
<asp:Button ID="btnAddProductions" runat="server" Text="اضافه کردن محصولات" OnClick="btnAddProductions_Click" />
<!------------------------------------------------------------------------>
<asp:Label ID="lblResult" runat="server" ForeColor="Red"></asp:Label>
<br />
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />

<!------------------------------------------------------------------------>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT * FROM [tbl_ProductCategory]" >
</asp:SqlDataSource>
</div>
<!------------------------------------------------------------------------>
</ContentTemplate>
</asp:UpdatePanel>
<!------------------------------------------------------------------------>




using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.IO;

public partial class Admin_AddProductions : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnAddProductions_Click(object sender, EventArgs e)
{
//-----------------------------------------------------------
bool fileOK = false;

string[] allow = { ".jpg", ".jpeg", ".gif", ".bmp", ".png" };
string fileExtension = Path.GetExtension(FileUpload1.FileName).ToLower(). Trim();
if (FileUpload1.HasFile)
{
for (int i = 0; i < allow.Length; i++)
{
if (fileExtension == allow[i] && FileUpload1.FileBytes.Length < 1048576)
{
fileOK = true;
}
}
}
//-----------------------------------------------------------
if (fileOK == true)
{
//FileUpload1.SaveAs(Server.MapPath(Path.Combine("~/images/",FileUpload1.FileName));
FileUpload1.PostedFile.SaveAs(Server.MapPath("~/images/" + FileUpload1.FileName));

SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["cn"].ConnectionString);
string query = "insert into tbl_production values (@proCatId,@proName,@proCast,@proPic,@proComment,@ proStock)";
SqlCommand cm = new SqlCommand(query, cn);
cm.Parameters.AddWithValue("proCatId", DropDownList2.SelectedValue);
cm.Parameters.AddWithValue("proName", txtProName.Text.Trim().ToLower());
cm.Parameters.AddWithValue("proCast", txtCast.Text.Trim());
cm.Parameters.AddWithValue("proPic", "~/images/" + FileUpload1.FileName.Trim().ToLower());
cm.Parameters.AddWithValue("proComment", txtComment.Text);
cm.Parameters.AddWithValue("proStock", txtStock.Text);
cn.Open();
cm.ExecuteNonQuery();
lblResult.Text = "محصول جدید در دسته بندی مورد نظر ثبت شد";
cn.Close();
}
else
{
lblResult.Text = "مجاز به استفاده از این فرمت عکس نیستید یا اندازه عکس بیش از یک مگابایت است";
}
//-----------------------------------------------------------


}
}

Alfred188
شنبه 14 دی 1392, 09:35 صبح
سلام، در مورد فایل آپلود شما نمیتونید از updatepanel استفاده کنید. برای آپلود شدن فایلتون باید صفحه postback بشه و یا می تونید از روش های ایجکسی دیگه و یا آپلودرهای ایجکسی استفاده کنید.

rational unified process
شنبه 14 دی 1392, 19:10 عصر
ممنون برادر.بخدا همین سوالو توی کد پراجکت پرسیدم کشتند منو و اخر هم جواب ندادند که ندادند.:افسرده:
خب حالا که اینطوریه باید چکار کنم؟
1.غیر از فایل اپلودر ایجکسی ،جور دیگه ای هم میشه صفحه رو پست بک کرد؟
2.روش های ایجکسی دیگه ،منظورتون کدومه؟ بیشتر توضیح میخوام عزیز.

Alfred188
شنبه 14 دی 1392, 21:49 عصر
سلام،
_می تونید updatepanel رو بردارید.
_می تونید این کد رو داخل updatepanel و قبل از <ContentTemplate> قرار بدید. بعد تست کنید ببینید کار می کنه. این کد باعث میشه با فشردن کلید btnAddProductions عمل postback انجام بشه.

<Triggers>
<asp:PostBackTrigger ControlID="btnAddProductions" />
</Triggers>

rational unified process
یک شنبه 15 دی 1392, 00:05 صبح
ممنون.میتونی به این هم یه جوابی بدی؟
http://barnamenevis.org/showthread.php?434927-%D8%BA%DB%8C%D8%B1-%D9%81%D8%B9%D8%A7%D9%84-%D8%B4%D8%AF%D9%86-Advanced-SQL-Generation-Options

rational unified process
یک شنبه 15 دی 1392, 00:34 صبح
مگه شما نمیگی توی فرمی که فایل اپلودر هست ،نمیشه آژاکس استفاده کرد و صفحه باید پست بک شه.خب چرا ControlID رو FileUpload1 نذاشتین بلکه btnAddProductions گذاشتین؟ خب وقتی FileUpload1 نیاز به پست بک داره فقط همونو بذاریم پست بک شه و چرا btnAddProductions رو PostBackTrigger کردین؟ البته من اینکارو کردم و خطا گرفت ازم. چرا؟ یه توضیحی میدی؟

Alfred188
یک شنبه 15 دی 1392, 09:31 صبح
سلام، اون در صورتی جواب میده که fileupload توانایی postback کردن صفحه رو داشته باشه! که همچین توانایی رو نداره. دکمه رو گذاشتیم چون هم صفحه رو postback می کنه هم بعد از اون دستورات آپلود رو انجام میده.

rational unified process
یک شنبه 15 دی 1392, 16:37 عصر
ابتدا بابت این تاپیک و اون یکی دیگه یکجا تشکر


همچین توانایی رو نداره- از نظر فنی چرا این کنترل نباید قابلیت پست بک رو داشته باشه؟

- در ضمن اگه زحمتی نیست یه توضیحی راجع به AsyncPostBackTrigger هم میدی.فرق این با PostBackTrigger در چیه؟