سؤال

أنا الانتقال من الكلاسيكية إلى ASP ASP.NET و قد واجهت ما يعلم الكثيرون منكم بالفعل كما "viewstate".قد يكون القفز البندقية مع افتراض ، ولكن يبدو مرهقة للغاية.لقد وضعت العديد من ASP أشكال في الماضي و لم القضايا مع الحفاظ على الدولة.هل هناك طريقة أخرى أو أنا ذاهب إلى تعلم هذا Viewstate شيء في ASP.NET?أنا باستخدام Visual Studio 2008 ، VB.NET كما رمز وراء اللغة الإطار v3.5 مع SQL Server 2005.

هل كانت مفيدة؟

المحلول

لم يكن لديك إلى.تحقق من إطار MVC.فإنه يلغي ViewState ويعمل القديمة ASP (على الأقل من وجهة النظر هذه).

نصائح أخرى

هذه السلسلة من الوظائف يجب أن القراءة من أجل فهم ViewState

أنا تعطيل ذلك و لا أكثر من عملي في Page_Init بدلا من تحميل (القيم لا تزال تحتفظ بسبب ControlState).هذا الإعداد عملت بشكل جيد بالنسبة لي.

ViewState هو اختياري ولكن مفيدة.ما ViewState هو كل التغييرات التي تحدث على السيطرة على جانب الملقم.لذا ، إذا كنت إسناد النص إلى التسمية ، وتريد أن النص أن تستمر من دون الحاجة إلى إعادة تعيين على كل إعادة النشر ، ثم عليك أن ترغب في الحفاظ على هذا.مثال آخر حيث أنا دائما أترك ViewState على أي شيء databound.

وقال أن هناك أوقات عندما يكون من المفيد أن تتحول ViewState قبالة ولهذا السبب نفسه.على سبيل المثال مكان واحد حيث كنت دائما بدوره ViewState هو رسالة التسمية.بهذه الطريقة, عندما يكون لدي لطباعة رسالة إلى المستخدم (واحد التي يجب أن لا تظهر إلا مرة واحدة ثم تزول) أنا فقط إضافة النص إلى التسمية ومن ثم نسيانها.خلال إعادة النشر التسمية تلقائيا العودة إلى النص الذي تم العثور عليه في ASPX الإعلان عن أن التحكم (في هذه الحالة سلسلة فارغة).

الآن لاحظ أن هذا لا علاقة له شكل مجموعة ، والتي هي القيم ترحيل IIS خلال إعادة النشر.شكل مجموعة يرسل القيم التي يدخلها المستخدم في عناصر النموذج (مربعات النص ، مربعات ، droplists ، إلخ).هذه .صافي سوف تعيش في المكان المناسب .. و هذا يحدث بعد ViewState تم تجهيزها.

بهذه الطريقة, إذا كنت ترسل مربع نص مع عبارة "مرحبا" إلى العميل المستخدم التغييرات إلى "أراك" ثم يقدم النموذج ، ما النص سوف يكون خلال وقت الحدث Page_Load الحرائق هو مربع نص مع "اللقاء" في النص السمة.

في ASP الكلاسيكية ونحن دائما استخدام حقل مخفي للقيام بهذه المهمة.Viewstate هو مجرد وسيلة للقيام بذلك بالنسبة لك تلقائيا.ثق بي منحنى التعلم ليست عالية كما تظن.

بعض الضوابط بعمق شلت عند تشغيل ViewState قبالة ، حتى تكون مستعدة لمعالجة هذه الشواغل.أنه من الأسهل أن يكون مجرد كسول و ترك ذلك ، ولكن تركت لحالها ، ViewState يمكن بسهولة تمثل 30% من حجم HTML الخاص بك.

على سبيل المثال نقول لديك المنسدلة ، و ربط قائمة من الفواكه.ربط في إذا(!IsPostBack) { } كتلة في تحميل الصفحة.إذا قمت بإيقاف ViewState, سوف تفقد البنود عند النقر على زر.فإنها تحتاج إلى أن تكون ملزمة كل تحميل الصفحة.سوف تفقد أيضا اخترتها مؤشر, لذلك سوف تحتاج إلى سحب هذا الطلب.شكل[] المتغيرات.

Viewstate هو جزء من حزمة عندما كنت تعمل مع ASP.NET.على الصفحة الأساسية/الموقع لا يجب أن تعرف كيفية استخدام Viewstate.فإنه يحصل فقط استخدامها كما كنت وضعت ضوابط على الصفحات.

من الصعب جدا تجنب Viewstate مع ASP.NET لأنه حتى إذا كنت إيقاف تشغيله على مستوى المشروع بعض الأفراد لا يزال يسيطر على استخدام Viewstate قائمة المعلومات الخاصة بهم.

إذا كنت لا تريد للتعامل مع Viewstate, النظر في استخدام ASP.NET إطار MVC.هل من المحتمل أن يكون أكثر راحة مع إطار MVC القادمة من الكلاسيكية ASP.

ViewState هو اختياري تماما في جل إن لم يكن كل الحالات.ASP.NET إعادة بملء الحقول تلقائيا حتى لو ViewStateEnabled=false.لقد تم استخدام ASP.NET لمدة 5 أو 6 سنوات و لم تعتمد على ViewState.حتى تعطيله عندما أستطيع.

ViewState يعمل تلقائيا في معظم الأحيان.انها فقط كيف ASP.NET بتتبع الحالة الراهنة من كل الضوابط.

يمكنك يدويا استخدام viewstate أيضا إذا كنت ترغب في تخزين بعض البيانات الإضافية.هذا هو بسيطة مثل:

Viewstate["Key"] = value;

التحذير الوحيد في ذلك هو أن أي كائن مخزن في viewstate يجب أن يكون قابل للتسلسل.

يمكنني أن أوصي بالتأكيد تجنب ViewState في DataGrids و DropDownLists لأنني في الآونة الأخيرة فقط بدأت تفعل ذلك بنفسي.أنا لم أفعل هذا من أجل المتعة ، كان لإصلاح الصفحة التي نمت كبيرة بحيث كان يسبب مشاكل أخرى.ولكن هذا تبين أن تكون سهلة ، وكانت النتائج مثيرة جدا أن أنا مسرور جدا.بالطبع صغيرة بسيطة التطبيق أو كميات صغيرة من البيانات هذا لن يكون ضروريا ، ولكن من ناحية أخرى فإنه من الجيد أن تكون متسقة (من المعروف أن يعرف حتى تتمكن باستمرار تحسين عملية...), و لماذا حمل أمتعة إضافية ؟

وهذا يتطلب القليل من التدخل اليدوي على الجزء الخاص بك.على سبيل المثال, إذا قمت بإيقاف viewstate على القوائم المنسدلة, سوف تحتاج إلى ربط لهم على كل إعادة النشر ، ومن ثم استعادة SelectedValue من وجوه الطلب.سوف تحتاج إلى قراءة على هذا, ولكن جوجل لديها الكثير من المعلومات المتاحة.

Viewstate يتم الاحتفاظ تلقائيا asp.net ضوابط "الجذور" إلى الصفحة.هناك القليل عليك القيام به القيم و بعض المعلومات الأخرى التي يتم تمريرها في خفية الإدخال B64 المشفرة.يمكنك ننظر في الأمر إذا كنت تريد, ولكن لا يهم, هو التعامل مع جميع التلقائى بالنسبة لك.

إذا كنت كتابة التعليمات البرمجية للاستهلاك الخاص بك ، يمكنك فقط إيقاف تشغيله ولا تقلق.

ويفترض أنت ذاهب للحفاظ على نماذج ويب مدونة مكتوبة من قبل الآخرين ، لذلك يجب أن نعرف ما هي خيارات التكوين و الألم النقاط.أعلى عدد قليل يمكنني التفكير

  • كيفية تعطيل في الموقع, صفحة و التحكم في مستوى
  • لماذا MachineKey ذات الصلة في المزارع ويب
  • لماذا هذا الحدث الخاص بك سجل مليء ViewStateAuthentication الأخطاء
  • ما هو ViewStateUserKey

من الناحية الفعلية منحنى التعلم وربما هذا هو شامل قراءة بضعة MSDN المواد.

ViewState ضروري الشر الكامنة في "نماذج ويب" استعارة.أنا شخصيا أجد هذه المنهجية التي عفا عليها الزمن ، المتضخمة عموما ليست ويب سهلة الاستخدام.تحقق أفضل إطار MVC على النحو المقترح أعلاه.

أقترح عليك تجنب إغراء استخدام ViewState بأنه "ذاكرة التخزين المؤقت" لتمرير البيانات ذهابا وإيابا (رأيت المواقع تفعل هذا بسبب متفاوت الإعداد و لا SQL المدعومة من الدورة الدولة).البيانات تسلسل وأضاف أن الصفحة ويجب أن تفعل roundtrips كل طلب ، مضيفا أن إجمالي حجم الصفحة و جعل موقع الويب الخاص بك أبطأ تحميل.

'<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HomePage.ascx.cs" Inherits="HomePage" %>
<script runat="server">
  void testHF_ValueChanged(object sender, EventArgs e)
    {
       this.HFvalue.Text = this.testHF.Value ;

    }
</script>
<asp:Label ID="UserNamelbl" runat="server" Text="User Name : " Visible="false"></asp:Label>
<asp:TextBox ID="UserNametxt" runat="server" Visible="false" ></asp:TextBox>
 <asp:Label ID="HFvalue" Text="......" runat="server"></asp:Label>
 <asp:HiddenField ID="testHF"
OnValueChanged="testHF_ValueChanged"
value="" 
runat="server" ></asp:HiddenField>
<input type="submit" name="SubmitButton" value="Submit" onclick="CL()" />

<script type="text/javascript">
    function CL() 
    {
        this.testHF.Value = this.UserNametxt.Text;  
    }
</script>
'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top