문제

내 신청서에는 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?.필드에 10진수로 변환할 수 없는 문자열을 입력하지 않는 한 이것은 잘 작동합니다.그 경우, UpdateItem 호출 던지기:

LinqDataSourceValidationException - 유형 MyType에서 하나 이상의 속성을 설정하지 못했습니다.asdf는 Decimal의 유효한 값이 아닙니다.

문제를 이해합니다. ASP.NET은 'asdf'를 10진수로 변환하는 방법을 모릅니다.내가 원하는 것은 이러한 잘못된 값을 모두 null로 변환하는 것입니다.이를 수행하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

귀하의 페이지에서 LinqDataSource의 Updating 이벤트를 처리해야 한다고 생각합니다.잘못된 문자열이 있는지 확인한 다음(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