سؤال

في طلبي لدي TextBox في FormView ملزمة ل LinqDataSource مثل ذلك:

<asp:TextBox ID="MyTextBox" runat="server" 
             Text='<%# Bind("MyValue") %>' AutoPostBack="True" 
             ontextchanged="MyTextBox_TextChanged" />

protected void MyTextBox_TextChanged(object sender, EventArgs e)
{
    MyFormView.UpdateItem(false);
}

هذا داخل UpdatePanel لذلك يستمر أي تغيير في المجال على الفور.كما أن قيمة MyValue يكون decimal?.يعمل هذا بشكل جيد إلا إذا قمت بإدخال أي سلسلة لا يمكن تحويلها إلى رقم عشري في الحقل.في هذه الحالة، UpdateItem رميات المكالمة:

LinqDataSourceValidationException - فشل في تعيين خصائص واحدة أو أكثر على نوع mytype.asdf ليست قيمة صالحة لـ Decimal.

أتفهم المشكلة، ASP.NET لا يعرف كيفية التحويل من 'asdf' إلى النظام العشري؟.ما أود أن أفعله هو تحويل كل هذه القيم غير الصالحة إلى فارغة.ما هي أفضل طريقة للقيام بذلك؟

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

المحلول

أعتقد أنه يجب عليك التعامل مع حدث التحديث الخاص بـ LinqDataSource على صفحتك.قم بالتحقق من وجود سلاسل غير صالحة (استخدم طريقة TryParse أو شيء من هذا القبيل) ثم تابع تحديث الفئة الأساسية.

(يحرر:حدسي يتوافق مع ما هو موصى به هنا)

نصائح أخرى

لست على دراية بـ ASP، ولكن في .net، ألا يمكنك أن تفعل شيئًا على غرار

protected void MyTextBox_TextChanged(object sender, EventArgs e)
{ 
    Decimal d = null;
    TextBox tb = sender as TextBox;

    if(!Decimal.TryParse(tb.Text, out d))
    {
            tb.Text = String.Empty;
    }
    MyFormView.UpdateItem(false);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top