PDA

View Full Version : از دست رفتن مقادیر ViewData بعد از تغییرات ایجکسی



IR-Developer
سه شنبه 01 مهر 1393, 12:11 عصر
سلام یک پارشیال ویو دارم که توش کنترل Select گذاشتم . توی چند فرم در ویوهای مختلف میخوام از مقادیر انتخاب شده ی اون استفاده کنم و به کنترلر بفرستم .

حالا id , name اون کنترل Select را از طریق ViewDataDictionary در ویو هنگام فراخوانی پارشیال ویو براش ارسال کردم تا هر ویو بتونه مقدار خودش را در پارشیال ویو داشته باشه .
@Html.Partial("_Cats", Model.Groups,new ViewDataDictionary{{"id","Category_ParentId"},{"name","Category.ParentId"}})

<select name="@ViewData["name"]" id="@ViewData["id"]">

<option value"">...</option>


</select>

مشکل اینجاست که وقتی صفحه ی پارشیال ویو با ایجکس آپدیت میشه id , name اون کنترل select که با ['']ViewData براش گذاشته شده کلا از بین میره . یعنی توی سورس صفحه اصلا خاصیت name,id دیگه نیست.
اگر دستی بهش id , name بدیم میمونه ولی با این روش بعد از عملیات ایجکسی از بین میره .

باید چکار کنم ؟

مهدی کرامتی
سه شنبه 01 مهر 1393, 12:42 عصر
ViewData (یا همون VirewBag) یک کالکشن موقت است که کارش نگهداری داده های پاس شده از کنترلر به View است و وقتی View رندر شد از بین میره. اگه هنوز به مقادیرش نیاز دارید بهتره مقادیر رو در چیزی مانند Hidden Field در سمت View نگه دارید.

Cybersilent
پنج شنبه 03 مهر 1393, 16:17 عصر
یه سوال مرتبط!
آیا اگر در طی یک درخواست اجکسی یک مثلا ViewBag در سمت سرور مقدار دهی شوند و دوباره یک نوع بازگشتی Json ارسال شوند، آیا الان مقدار ViewBag جدید در سمت ویو قابل مشاهده است؟! یا اینکه برای اینکار باید دوباره کل View دوباره رندر شوند؟

مهدی کرامتی
جمعه 04 مهر 1393, 12:20 عصر
ViewBag فقط وقتی مجددا لود می شود که کل View مجددا رندر شود.

HOSSEINONLINE7
جمعه 04 مهر 1393, 15:05 عصر
سلام مواقعی که میخوام اطلاعاتم از بین نره بجای اینکه ViewData را هر بار مجدد مقدار دهی کنم از سشن استفاده میکنم . این باعث اثر منفی روی Performance نمیشه ؟

مهدی کرامتی
جمعه 04 مهر 1393, 22:20 عصر
چرا، اثر منفی میگذاره، چون از حافظه سرور استفاده میشه. بهتره یک Web Api درست کنی و اطلاعات رو با Ajax از اون بخونی.