• 0

مشكلة في الـWCF: خطأ في التعامل مع Web Forms ASP

السلام عليكم، لدي برنامج بسيط جداً وهو عبارة عن صفحة ويب بهذا الشكل:
 

        <form id="form1" runat="server">
            <div id="rectangle">
                <h1>Area of Rectangle</h1>
                <span>please Enter Height</span> <asp:TextBox CssClass="txtInput" ID="rqHeight" runat="server" /> <br /> <br />
               <span>please Enter Width</span> <asp:TextBox CssClass="txtInput" ID="rqWidth" runat="server" /> <br />
                <asp:Button CssClass="btnStyle" ID="calc1" runat="server" Text="Calculate" OnClick="calc1_Click" />
            </div>
            <div id="square">
                <h1>Area of Square</h1>
                <span>please Enter Side</span> <asp:TextBox CssClass="txtInput" ID="sqSide" runat="server" /><br />
                <asp:Button CssClass="btnStyle" ID="calc2" runat="server" Text="Calculate" OnClick="calc2_Click" />
            </div>
            <script src="calFunc.js"></script>
        </form>

ولدي أيضاً WCF Service منفصلة مهمتها هي أخذ قيم عددية معينة من الـTextbox في صفحة الويب ثم تطبيق العملية المطلوبة (الضرب). وفي برنامج الويب (asp.net) عملت أرفاق في الــRefrences بالنسبة لخدمة WCF وبذلك صارت صفحة الويب مرتبطة بالخدمة التي أنشأتها سابقاً..
مهمة البرنامج ببساطة عندما أضغط على زر Calculate الذي يحمل الــID = calc1 أن يقوم بعمل ضرب الــHeight في الـWidth ويطبع لي النتيجة في الــTextbox الذي يحمل ID = sqSide

ولكن بحسب الكود الذي لدي يعطيني الناتج = 0 ، صراحة عمل Debug للموضوع ولم أفهم المشكلة، هذا هو الكود (.cs) الموجود مع صفحة الويب (index.aspx):

 

        public int h, w, result;
        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        public int RectangleArea(int Height, int Width)
        {
            /* For Calculating the Area of Rectangle */
            AreaClient ac1 = new AreaClient();
            h = Convert.ToInt32(rqHeight.Text);
            w = Convert.ToInt32(rqWidth.Text);
            ac1.RectangleArea(h, w);
            result = h * w;
            return result;
        }
        protected void calc1_Click(object sender, EventArgs e)
        {
            sqSide.Text = result.ToString();
        }


---
لدي سؤالين:
1. كيف يمكنني إظهار نتيجة ضرب العددين من الــTextBoxes => كالتالي rqHeight * rqWidth ؟ ثم إظهار النتيجة في الـTextbox الذي يحمل الــ ID = sqSide؟
2. هل يمكنني إستخدام الجافا سكربت لجلب الناتج بدل عرضه في الــTextbox يتم عرضه في Alert من لغة الجافا سكربت؟ وكيف يتم الأمر؟

شكراً لكم على المساعدة.

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

على الرّحب والسعة

قبل أن أجيبك هل يمكنك كتابة محتوى ملف الـ WCF Service الذي قت بإنشاءه؟

الرابطين أدناه يوضّحان بالتفصيل طريقة إنشاء WCF Service والتعامل معها:

A Simple Example of WCF Service

http://www.codeproject.com/Tips/468354/WCF-Example-for-Inserting-Deleting-and-Displaying

سأوضّح لك -على سبيل المثال لا الحصر- أن أي خدمة ويب Web Service أو WCF Service في الموقع يتم استخدامها إما لتجنب عملية الـ Submit على الخادوم عند جلب بيانات من قاعدة البيانات وفي هذه الحالة نستخدم الـ Web Service أو لإرسال رسائل غير متزامنة من endpoint Service لأخرى باستخدام WCF Service.

يتم التّعامل مع الـ Web Service عن طريق ajax أي أنه يتم إنشاء Web Method في ملف الويب سيرفيس ويتم استدعاء هذه الدالة باستخدام ajax.

[WebService] 
public class Service : System.Web.Services.WebService 
{ 
      [WebMethod] 
      public string Test(string strMsg) 
      { 
          return strMsg; 
      } 
}

في حين تستخدم WCF Service الـ DataContractAttribute وDataMemeberAttribute

[DataContract] 
public class Item 
{ 
    [DataMember] 
    public string ItemID; 
    [DataMember] 
    public decimal ItemQuantity; 
    [DataMember] 
    public decimal ItemPrice;
}

ولأوضّح لك سريعًا أحد فوائد الويب سيرفيس ومتى يتم استخدامها، تخيل أنه لديك قائمة منسدلة وتريد أن تجلب بيانات من قاعدة البيانات اعتمادًا على القيمة التي يختارها المستخدم من الخيارات الموجودة في القائمة -مثلًا- قائمة منسدلة تحوي على خيارات ألوان وقام المستخدم باختيار اللون الأزرق فعليك جلب كل المنتجات ذات اللون الأزرق من قاعدة البيانات ولو تم ذلك بدون استخدام الويب سيرفيس ستقوم الصفحة بعملية Submit على الخادوم وسيعاد تحميل الصفحة من جديد مما يزيد العبء على الخادوم وبالتالي تراجع الأداء Performance وكذلك قد تظهر بعض المشاكل التي لا تتوقعها.

بالنسبة للبرنامج الخاص بك وهو حساب مساحة المربع والمستطيل فلا يوجد داعي لاستخدام الويب سيرفيس ولا حتى الذهاب للخادوم يمكنك عمل التطبيق بشكل كامل عن طريق الجافاسكربت ولكن يمكنك بالطبع استخدام الويب سيرفيس ولكن في هذا النوع من التطبيقات استخدامها لن يخدمك بشيء.

بالتوفيق

تمّ تعديل بواسطة Lujain
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

نعم يمكنك استخدام السكربت من الـ #C أي يمكنك استدعاء تابع جافا سكربت أو كتابة سكربت جديد باستخدام ScriptManager كما في المثال التالي:

protected void Page_PreRender(object sender, EventArgs e)
{
    ScriptManager.RegisterStartupScript(this, GetType(), "YourUniqueScriptKey", 
        "alert('This pops up');", true);
}

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

أعتذر عن إزعاجك @Lujain لكن هل يمكنك مساعدتي؟ :)
وشكراً لك :)

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ منذ ساعة مضت قال Lujain:

بالنسبة للبرنامج الخاص بك وهو حساب مساحة المربع والمستطيل فلا يوجد داعي لاستخدام الويب سيرفيس ولا حتى الذهاب للخادوم يمكنك عمل التطبيق بشكل كامل عن طريق الجافاسكربت ولكن يمكنك بالطبع استخدام الويب سيرفيس ولكن في هذا النوع من التطبيقات استخدامها لن يخدمك بشيء.

بالتوفيق

بالطبع لن يخدمني الــWeb Service كثيراً ، ولكن فقط أريد التدريب عليه، كما طُلب عندنا في الجامعة.
ولكن على العموم حللت المشكلة لوحدي قبل إجابتك والحمدلله إستطعت الحصول على النتيجة.

ولكن تبقّى لي مشكلة واحدة فقط وهي أريد إظهار النتيجة من كود C# إلى Javascript ، بمعنى أريد عمل Alert لإظهار النتيجة فيه! بحثت كثيراً وطبقت العديد من الخطوات ولكنني لم أنجح في ذلك. فهل من الممكن عمل هذا؟

شكراً لك كثيراً  @Lujain على المساعدة :)

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن