PDA

View Full Version : دریافت کالکشن از view



resident
جمعه 11 مرداد 1392, 15:10 عصر
سلام.

فرض کنید من در فرم اشخاص برای تلفن 3 تا فیلد دارم: نوع(dropdownlidt)، تلفن و داخلی.

یه دکمه add هم کنار باکس تلفن میذارم تا کاربر بتونه چند تا تلفن وارد کنه .
میخواستم ببینم اینو تو MVC چطور باید پیاده سازی کنم؟ وقتی میخواد اطلاعات رو برگردونه به کنترلر باید کالکشن برگردونه.

کسی میتونه نمونه کد بذاره? اصلا ذهنیتی در این مورد ندارم

parvizwpf
جمعه 11 مرداد 1392, 15:25 عصر
هر اکشنی میتونه یه سری دیتا به اکشنی دیگه پاش بده در ضمن میتونه اکشن همنام باشه و فقط برای فهمیدن وضعیت اکشن از get,post استفاده کنه.
حالا شما میتونید هر نوع دیتایی رو توسط پارامترهای اون اکشن به اکشن دیگه منتقل کنید.

resident
جمعه 11 مرداد 1392, 18:11 عصر
پرویز جان این کالکشن که شامل تلفن هاست باید در View ساخته بشه و به عنوان مقدار فیلد تلفن به کنترلر پاس داده بشه

parvizwpf
شنبه 12 مرداد 1392, 01:41 صبح
من هم گفتم باشه هر کالکشنی باشه شما بیا یه کلاس انتیتی مانند برای اون شماره تلفنها بساز بعد هر جایی خواستی بصورت پارامتر، توی هر اکشن کنترلری بخون، بفرست هر چی.

hakim22
شنبه 12 مرداد 1392, 09:41 صبح
اون چیزی که شما لازم دارید استفاده از Model binding برای دریافت یک لیست از نوع Complex Type است ! یعنی لیست ما بجای اینکه یک مقدار ساده مثل string یا int یا bool باشه یک کلاس شامل چندین خصوصیت که معمولا خودمون تعریف می کنیم.

به این مقاله مراجعه کنید (http://stackoverflow.com/questions/7176702/mvc-3-binding-to-a-complex-type-with-a-list-type-property)

در View مهمترین قسمت این بخشه :

@model MyDLL.WebUI.Models.SearchCategoriesViewModel
@{
var i = 0;
}
@foreach (var c in Model.Categories)
{
@Html.Hidden("Categories[" + i.ToString() + "].Id", c.Id);
@Html.Hidden("Categories[" + i.ToString() + "].Name", c.Name);
@Html.Label(c.Name);
@Html.CheckBox("Categories[" + i.ToString() + "].IsSelected",c.IsSelected);
}


در اینجا هم اون چیزی که خیلی مهمه name مربوط به input در فرمه و تنها در صورتی به صورت Collection به کنترلر برگشت میکنه که اندیس داخل [] جلوی اسم داشته باشه . در حقیقت MVC در سمت Controller در صورتی متوجه میشه که Collection باید خونده بشه که input ها اسمشون با یک [] که توش شماره اندیس هست نام گذاری شده باشند.

دقت کنید که در سمت کنترلر باید نام متغیر با نامی که در اینجا برای input ها استفاده کرده اید یکی باشد و حتما از نوع list یا IEnumerable یا امثال آن تعریف شده باشد تا عمل Binding موفق باشد.