PDA

View Full Version : مبتدی: مشکل در خصوص Area (یک سولوشن با دو پروژه)



Saeed.Masoumi
دوشنبه 10 آذر 1393, 14:14 عصر
با سلام
من یک پروژه با نام mainProject ایجاد کردم سپس روی Solution کلیک راست کردم و از منوی Add گزینه New project را انتخاب نمودم نام پروژه جدید را moduleProject انتخاب نمودم سپس بر روی پروژه moduleProject کلیک راست کردم و از منوی Add گزینه Area را انتخاب نمودم نام Area را برابر Login قرار دادم سپس کد کلاس LoginAreaRegistration را آپدیت نمودم :

...
new {action="Login , id=..."

سپس بر روی شاخه Areas/Login/Controllers کلیک کرده و کنترلر جدید با نام LoginController ساختم و در پایان کد نوشتم :



...
return Login();
...


سپس در شاخه Areas/Login/Views کلیک کرده و View جدیدی با نام Login.cshtml ساختم.
سپس به Refrences از "mainProject" خروجی "moduleProject" را اضافه نمودم.
سپس در mainProject کنترلر Home را ساختم و ActionResult را به صورت پیش فرض رها کردم (Index) و View متناظر با آن را ایجاد نمودم.

اگر سایت را با آدرسهای





[*=left]localhost:2130
[*=left]localhost:2130/Home/Index


بازنمایم View مروبط به پروژه mainProject نمایش داده می شود
سوال:
با چه آدرسی می توانم View مربوط به moduleProject را نمایش دهم؟
با تشکر

helpsos
دوشنبه 10 آذر 1393, 18:38 عصر
دوست عزیز نامعلوم
این طور که پیداست پروژه شما پیچیده شده و در آینده بیشتر میشه
بهتره که شما از T4MVC استفاده کنی
و می توانی توی سایت www.dotnettips.info (http://www.dotnettips.info) دنبال روش کار کردن با اون بگردی.

ولی خب اینجا هم چون که از Area استفاده کردی اول باید توی فایل RouteConfig.cs اونرا به صورت زیر ویرایش کنی:

public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
,namespaces:new []{"NameProje.Controllers"}//اگه این رو ننویسیم چون چندتا ارآ داریم قاطی میکنه که از کدوم اول بخونه
);
}
}

و بعد هم برای اینکه یه ویو توی Area را نمایش بدیم باید لینک هامون به صورت مثلا زیر باشه:


"~/Areas/Admin/Views/Login/Index.aspx"

هر چند اگه از T4MVC استفاده کنی خیلی راحت میشی

Saeed.Masoumi
دوشنبه 10 آذر 1393, 21:15 عصر
مرسی دوست عزیز بابت جواب دادنت.
این روش رو توی فصل 8 از کتاب مرجع کامل ASP.NET MVC تالیف مهندس بهروز راد (http://barnamenevis.org/member.php?7945-Behrouz_Rad) صفحه 172 به بعد توضیح داده اما من که از اون روشی که بالا توضیح دادم اقدام میکنم این خروجی رو توی آدرس

http://localhost:1122/login/login میگیرم:

Server Error in '/' Application. The view 'Login' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Areas/Login/Views/login/Login.aspx
~/Areas/Login/Views/login/Login.ascx
~/Areas/Login/Views/Shared/Login.aspx
~/Areas/Login/Views/Shared/Login.ascx
~/Views/login/Login.aspx
~/Views/login/Login.ascx
~/Views/Shared/Login.aspx
~/Views/Shared/Login.ascx
~/Areas/Login/Views/login/Login.cshtml
~/Areas/Login/Views/login/Login.vbhtml
~/Areas/Login/Views/Shared/Login.cshtml
~/Areas/Login/Views/Shared/Login.vbhtml
~/Views/login/Login.cshtml
~/Views/login/Login.vbhtml
~/Views/Shared/Login.cshtml
~/Views/Shared/Login.vbhtml Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: The view 'Login' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Areas/Login/Views/login/Login.aspx
~/Areas/Login/Views/login/Login.ascx
~/Areas/Login/Views/Shared/Login.aspx
~/Areas/Login/Views/Shared/Login.ascx
~/Views/login/Login.aspx
~/Views/login/Login.ascx
~/Views/Shared/Login.aspx
~/Views/Shared/Login.ascx
~/Areas/Login/Views/login/Login.cshtml
~/Areas/Login/Views/login/Login.vbhtml
~/Areas/Login/Views/Shared/Login.cshtml
~/Areas/Login/Views/Shared/Login.vbhtml
~/Views/login/Login.cshtml
~/Views/login/Login.vbhtml
~/Views/Shared/Login.cshtml
~/Views/Shared/Login.vbhtml

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:

[InvalidOperationException: The view 'Login' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Areas/Login/Views/login/Login.aspx
~/Areas/Login/Views/login/Login.ascx
~/Areas/Login/Views/Shared/Login.aspx
~/Areas/Login/Views/Shared/Login.ascx
~/Views/login/Login.aspx
~/Views/login/Login.ascx
~/Views/Shared/Login.aspx
~/Views/Shared/Login.ascx
~/Areas/Login/Views/login/Login.cshtml
~/Areas/Login/Views/login/Login.vbhtml
~/Areas/Login/Views/Shared/Login.cshtml
~/Areas/Login/Views/Shared/Login.vbhtml
~/Views/login/Login.cshtml
~/Views/login/Login.vbhtml
~/Views/Shared/Login.cshtml
~/Views/Shared/Login.vbhtml]
System.Web.Mvc.ViewResult.FindView(ControllerConte xt context) +393202
System.Web.Mvc.ViewResultBase.ExecuteResult(Contro llerContext context) +120
System.Web.Mvc.ControllerActionInvoker.InvokeActio nResult(ControllerContext controllerContext, ActionResult actionResult) +13
System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +23
System.Web.Mvc.ControllerActionInvoker.InvokeActio nResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +242
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +21
System.Web.Mvc.ControllerActionInvoker.InvokeActio nResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +175
System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +89
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
System.Web.Mvc.Async.AsyncControllerActionInvoker. EndInvokeAction(IAsyncResult asyncResult) +43
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.Controller.EndExecuteCore(IAsyncRes ult asyncResult) +57
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAs yncController.EndExecute(IAsyncResult asyncResult) +10
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsync Result asyncResult) +47
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHan dler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.Htt pApplication.IExecutionStep.Execute() +9690172
System.Web.HttpApplication.ExecuteStep(IExecutionS tep step, Boolean& completedSynchronously) +155

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.34009

helpsos
دوشنبه 10 آذر 1393, 22:00 عصر
این خطایی که شما گذاشتی داره میگه که من همه ی پوشه های شما رو دنبال اون ویوی خاص گشتم چیزی نبود که نشونت بدم.

بیشتر از این نمیتونم کمکت کنم. به نظرم ارزشش رو داره که یه سری به سایت www.dotnettips.info بزنی و دنبال T4MVC بگردی.

Saeed.Masoumi
دوشنبه 10 آذر 1393, 22:13 عصر
مرسی دوست عزیز دارم رو همون مسئله کار می کنم ممنون
اما لطفا یکبار دیگه سوال رو با دقت بخون برای بهتر درک شدن قضیه این عکس رو هم میزارم اینجا
126220

~/Areas/Login/Views/login/Login.cshtml
این خطا مشکله منه!

r4hgozar
سه شنبه 11 آذر 1393, 05:26 صبح
سلام. دوست بزگوار.


2 تا کد اینجا می نویسم این کارو رو انجام بده.احتمالا جواب می گیری.
یک اینکه
این کد رو تو loginarearegestration تصحیح کن.

new { controller = "Home", action = "Index", id = UrlParameter.Optional }



یعنی کنترل ها رو تنظیم کن.
اینی که دوستمون هم گفت به ruoteconfig اصلی اضافه کن



namespaces:new[]{"NameProje.Controllers"}


حالا آدرس صفحت میشه


[*=left]localhost:2130/login/nameaction


و اگه


[*=left]localhost:2130/login
[*=left]بزنی همون action
[*=left]localhost:2130/login/Index


باز میشه


اما اگه می خواین همون اول صفحه login باز شه باید مقدار defult رو تو ruteconfig تغییر بدین

Saeed.Masoumi
سه شنبه 11 آذر 1393, 10:07 صبح
سلام. دوست بزگوار.


2 تا کد اینجا می نویسم این کارو رو انجام بده.احتمالا جواب می گیری.
یک اینکه
این کد رو تو loginarearegestration تصحیح کن.

new { controller = "Home", action = "Index", id = UrlParameter.Optional }



یعنی کنترل ها رو تنظیم کن.
اینی که دوستمون هم گفت به ruoteconfig اصلی اضافه کن



namespaces:new[]{"NameProje.Controllers"}


حالا آدرس صفحت میشه


[*=left]localhost:2130/login/nameaction


و اگه


[*=left]localhost:2130/login
[*=left]بزنی همون action
[*=left]localhost:2130/login/Index


باز میشه


اما اگه می خواین همون اول صفحه login باز شه باید مقدار defult رو تو ruteconfig تغییر بدین



سلام ممنون به خاطر جوابتون
1- اسم View متناظر با کنترلر Login, همونطوری که می بینین Login می باشد پس اکشن را هم برابر Login گذاشتم
2-چون همنام نیستند نیاز به تعریف Namespace توی روتینگ نیست
اگر اشتباه می گم تصحیح بفرمایید.