PDA

View Full Version : نمایش اشتباه اطلاعاتی که دارای enter باشند



بیتافرهی
یک شنبه 11 مرداد 1388, 22:42 عصر
سلام
روی یکی از صفحات برنامم ،یه text Box گذاشته ام و خاصیت TextMode="multiline" را هم تنظیم کردم تا به صورت مالتی لاین باشد.
مشکلم اینجاست که اگر کاربر موقع وارد کردن متن در text Box ،دکمه ی Enter را بزند تا به خط بعدی برود ،هنگامی که من می خواهم از دیتابیس این اطلاعات را استخراج کنم و در یک گرید ویو نمایش بدم،تمام آنها را در یک خط نشان می دهد.
در صورتی که من می خوام این اطلاعات به همان صورتیکه کاربر نوشته ،نمایش داده شوند.
حجم این اطلاعات که در یک textbox نوشته می شود ،حتی ممکن است یه اندازه ی یک صفحه هم باشد.
موقع وارد کردن اطلاعات در text box من از تگ <BR> به جای استفاده از زدن دکمه ی اینتر استفاده کردم ولی این بار هم خطا داد:

A potentially dangerous Request.Form value was detected from the client (txtBody="ziba<BR> diba<BR>").
لطفا راهنمایی کنید.

milade
یک شنبه 11 مرداد 1388, 23:22 عصر
درود
همون Enter رو بزنید و وقتی اومد سرور ، کد اسکی 13 ( Enter ) رو به <br> تبدیل کنید .

موفق باشید

بیتافرهی
یک شنبه 11 مرداد 1388, 23:41 عصر
چه چوری؟
وقتی که دارم اون فیلد از جدول را به یک گرید ویو بایند می کنم، چه چوری باید این تبدیلو انجام بدم؟

milade
دوشنبه 12 مرداد 1388, 00:03 صبح
سلام
همین الان که داری ذخیره میکنی تبدیل کن !
این جوری مجبور نیستی برا هر درخواست پروسه تبدیل رو انجام بدی .

موفق باشید

salehbagheri
دوشنبه 12 مرداد 1388, 00:28 صبح
چندین راه داره!

ابتدایی ترین راه اینه که از تابع زیر استفاده کنید قبل از ارسال داده هاتو به دیتابیس!



Private Function MailBody(ByVal Value As String) As String
Dim BodyLines As New List(Of String)
BodyLines.AddRange(Value.Split(Environment.NewLine ))
Dim Body As String = ""
For I As Integer = 0 To BodyLines.Count - 1
Body += BodyLines(I) + "<br />"
Next
Return Body
End Function


راه دوم استفاده از روش آقا میلاد هست!

راه سوم هم قرار دادن مقدار False برای خصیصه ValidateRequest صفحه تون هست!

بیتافرهی
دوشنبه 12 مرداد 1388, 11:31 صبح
راه سوم هم قرار دادن مقدار False برای خصیصه ValidateRequest صفحه تون هست!
این راه که جواب نداد.بازم وقتی در گرید ویو نمایششون میدم ،تمام متن را پشت سر هم نشان میدهد.

salehbagheri
دوشنبه 12 مرداد 1388, 12:08 عصر
راه سوم برای روش زیر بود:



موقع وارد کردن اطلاعات در text box من از تگ <BR> به جای استفاده از زدن دکمه ی اینتر استفاده کردم ولی این بار هم خطا داد:

بیتافرهی
دوشنبه 12 مرداد 1388, 17:29 عصر
این دفعه خطا نمیگیره ولی توی گرید ویو تگ <BR> بین نوشته ها دیده می شود.علاوه بر این همچنان پشت سرهم هستند و تاثیری نداشته.
من برناممو با C# می نویسم.وی بی بلد نیستم.
میشه لطف کنید بگید تو این کد دارید چیکار می کنید؟

BodyLines.AddRange(Value.Split(Environment.NewLine ))

salehbagheri
دوشنبه 12 مرداد 1388, 23:45 عصر
خوشتیپ! وقتی از این تابع استفاده میکنید، دیگه لازم نیست از تگ Br در متن خودتون استفاده کنید!

به صورت ساده تایپ کنید و از این تابع بگذرونید و در دیتابیس ذخیره کنید!



میشه لطف کنید بگید تو این کد دارید چیکار می کنید؟


BodyLines.AddRange(Value.Split(Environment.NewLine ))


وقتی شما کلید Enter رو هنگام تایپ اطلاعات در TextBox میزنید، مقدارش توسط این کد شناسایی میشه و عملیات جداسازی بر اساس اون انجام میشه!


این هم به زبان #C :


private string MailBody(string Value)
{
System.Collections.Generic.List<string> BodyLine;
BodyLines.AddRange(Value.Split(Environment.NewLine ));
string Body = "";
for (int i; i = 0; i++)
Body += BodyLine[i] + "<br />";
return Body;
}

بیتافرهی
سه شنبه 13 مرداد 1388, 13:49 عصر
ممنون از تابعی که فرستادید.ولی 6 تا خطا داشت.یه تغییرات کوچیکی درش دادم،حالا به اینجا رسیده که روی این خطی که قرمزش کردم ،2 تاخطا می گیره:

private string MailBody(string Value)
{

string enter = Environment.NewLine;
char[] deli = enter.ToCharArray();


List<string> BodyLine = new List<string>();

BodyLine.AddRange(Value.Split(deli));
string Body = "";

for (int i; i < BodyLine .Count ; i++)
Body += BodyLine < i > + "<br />";
return Body;
}خطا:

Error 1 Operator '<' cannot be applied to operands of type 'System.Collections.Generic.List<string>' and 'int'
و

Error 2 Operator '+' cannot be applied to operand of type 'string'
ضمنا من همین تابع شمارو با استفاده از string به جای LIST نوشتم ، خطا نمیده،اما موقع نمایش در گریدویو ،محتویات اون فیلد را فقط به صورت

System.String[]<br/>System.String[]<br/>System.String[]<br/>نشان میدهد.

salehbagheri
سه شنبه 13 مرداد 1388, 15:08 عصر
بابا شما که دیگه باید بتونید اینطور مشکلات رو حل کنید!

اصلاح شد!


Body += BodyLine[i] + "<br />";



البته من کد VB رو با اندک دانش خودم به #C تبدیلش کردم و دقیقاً چک نکردم ببینم که درست جواب میده یانه! چون این تبدیلات رو باید خودتون انجام بدید!

بیتافرهی
سه شنبه 13 مرداد 1388, 16:24 عصر
من تا حالا با List ها کار نکرده بودم ،فکر می کردم شما درست نوشتید.
هر چند حالا دیگه error نمیده ولی درست هم کار نمیکنه!:ناراحت:
عبارتی که تو دیتابیس ذخیره می کنه و تو گرید ویو نمایش میده باز هم درست نیست.اینم نمونش:

saba<br /><br />star<br /><br />
(چه من اینتر بزنم یا اینکه خودش خط که تموم شد بره خط بعدی ،همچین مشکلیو داره)

m_d6712
چهارشنبه 14 مرداد 1388, 00:26 صبح
چرا خودتونو اذیت میکنین!
هیچ کاری نمی خواد بکنی!
مثل اول که دخیره می کردی ذخیره کنش!
وقتی می خوای چاپش کنی این کد رو بهش اضافه کن!
مثلا بجای

response.write(mystr)
بنویس

response.write(mystr.replace(vbcrlf, "<br />"))