PDA

View Full Version : مبتدی: ارسال یک ID از یک View به یک View دیگر



Behnam6670
دوشنبه 04 اسفند 1393, 10:53 صبح
سلام
دوستان خسته نباشید.
من تا الان ASP.net کار میکردم ولی تازهگیا دارم MVC کار میکنم.راستش چون تازه کارم یکم دارم شوت میزنم:لبخند:
من یه صفحه دارم که توش اطلاعات کاربرا رو دارم نشون میدم همون Index View
حالا تو این صفحه ایندکس جلوی سطر اطلاعات هر کاربر یه لینک گذاشتم به نام جزئیات که وقتی کاربر روش کلیک میکنه یه صفحه جدید باز میشه و کاربر میتونه جزئیات اون کاربر رو اضافه کنه.
من صفحه ایندکسم رو ساختم و اطلاعات رو نشون میدم

@model IEnumerable<MvcApp.Models.tblPerson>


@{
ViewBag.Title = "Index";
}


<h2>صفحه نخست</h2>


<p>
@Html.ActionLink("جدید", "Create")
</p>
<table>
<tr>
<th>
نام کاربر
</th>
<th>
نام خانوادگی
</th>
<th></th>
</tr>


@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.fName)
</td>
<td>
@Html.DisplayFor(modelItem => item.fFamily)
</td>
<td>
@Html.ActionLink("ویرایش", "Edit", new { id = item.fid }) |
@Html.ActionLink("جزئیات", "../Address/Index", new { id = item.fid })|
@Html.ActionLink("حزف", "Delete", new { id = item.fid })


</td>
</tr>
}


</table>




من یه کنترلر جدید ساختم که اسمش رو گذاشتم Address .الان رو لینک جزئیات که کلیک میکنم صفحه ایندکس مربوط به کنترلر Address رو نشون میده ولی من میخوام تو ایندکس صفحه Address یه آیدی بگیرم و از صفحه جزئیات سطرهایی که مربوط به این آیدی هست رو فیلتر کنم
من از کد زیر استفاده کردم ولی چیزی رو نشون نمیده یعنی مقدارش Null هستش.


public ActionResult Index([Bind(Exclude = "fid")]tblAddress item)
{
return View(db.tblAddresses.Where(c => c.fidF.Equals(item.fidF)).ToList());
}


بنظرتون نحوه ارسال آیدی مشکل داره؟؟؟اصلا پیشنهاد اساتید چیه برای این کار؟؟لطفا راهنمایی کنید

niloo17
دوشنبه 04 اسفند 1393, 10:59 صبح
شما شناسه کاربر مورد نظرتون را با استفاده از پارامتر


new { id = item.fid }

به کنترلر ارسال می کنید و در کنترلر مورد نظر خودتون


public ActionResult Index(int id)

{
return View(db.tblAddresses.Where(c => c.fid=id).ToList());

}

Behnam6670
دوشنبه 04 اسفند 1393, 11:43 صبح
شما شناسه کاربر مورد نظرتون را با استفاده از پارامتر


new { id = item.fid }

به کنترلر ارسال می کنید و در کنترلر مورد نظر خودتون


public ActionResult Index(int id)

{
return View(db.tblAddresses.Where(c => c.fid=id).ToList());

}




آقا ممنون.این مشکلم حل شد .ولی باز یه مشکل دیگه دارم،اونم اینه که من تو کنترلر Address هم قابلیت Create و Update رو دارم.
یعنی وقی از صفحه لیست کاربرا یک سطری رو. انتخاب کردم و جزئیات مربوط به اون کاربر رو برام اورد تو این صفحه بتونم برا همون کاربر جزئیات دیگه ای رو هم بتونم اضافه کنم یا جزئیاتش رو Update کنم.یا بتونم یکی از جزئیات رو حذف کنم.تو این حالتی که شما گفتید وقی تو صفحه جزئیات رو لینک Create New کلیک میکنم و View مربوط به Create رو میبینم ،وقی که برمیگردم به صفحه جزئیات دیگه اون Id رو نداره که لیست جزئیات کاربر رو برام نشون بده

niloo17
دوشنبه 04 اسفند 1393, 12:03 عصر
شما می تونید از چند روش استفاده کنید .
1. برای آدرس هاتون یک ViewModel بسازید که مقدار fid داشته باشه .
2. با استفاده از ViewData, ViewBag مقدار fid را به view ارسال کنید.

ولی روش پیشنهادی من اینه که کلا سناریوتون تعییر بدید و در همان view ابتدایی لیست آدرس های مربوط به کاربر را نمایش بدید که با ویرایش و ایجاد کاربر جدید همان جا آدرس ها هم قابل اضافه و ویرایش باشه . و دیگه احتیاجی به view جدید نباشه .