PDA

View Full Version : سوال: ساختار rout ها در mvc به چه صورت است



faridnoz
سه شنبه 22 اسفند 1391, 15:15 عصر
با سلام خدمت دوستان و اساتید
1.اگر در یک solution دو یا چند پروژه mvc وجود داشته باشد rout ها در کجا تنظیم باید شود وچگونه
می توان از یک پروژه به یک action در یک کنترل خواص در پروژه دیگر دسترسی داشت؟
2.سطح دسترسی ها به action های یک controller بدون استفاده از attrib به چه صورت است؟
3.فرایند ارسال یک فرم بدون استفاده از دکمه چگونه است(مثل خاصیت auto post back در asp.net)؟
با تشکر

hakim22
سه شنبه 22 اسفند 1391, 19:54 عصر
در مورد سوال اول باید یک کلاس از AreaRegisteration مشتق کنید و هر پروژه را با استفاده از RegisterArea ثبت کنید. ولی در نهایت باید بیشتر تنظیمات را در IIS انجام دهید و هر Area را به صورت یک Application ثبت کنید. با استفاده از ابزار T4MVC میشود خیلی از کارها را اتوماتیک انجام داد از codeplex دانلود کنید.

بهتر است بجای پروژه های دیگر از Area ها استفاده کنید.

2- منظور شما واضح نیست. برای نمایش ویو ها در Area های دیگر باید از Attrib استفاده کنید

3- برای اینکار دستور مستقیمی در MVC وجود ندارد و باید از jQuery استفاده کنید.

Saeed_m_Farid
چهارشنبه 23 اسفند 1391, 13:45 عصر
با سلام خدمت دوستان و اساتید
1.اگر در یک solution دو یا چند پروژه mvc وجود داشته باشد rout ها در کجا تنظیم باید شود وچگونه
می توان از یک پروژه به یک action در یک کنترل خواص در پروژه دیگر دسترسی داشت؟
2.سطح دسترسی ها به action های یک controller بدون استفاده از attrib به چه صورت است؟
3.فرایند ارسال یک فرم بدون استفاده از دکمه چگونه است(مثل خاصیت auto post back در asp.net)؟
با تشکر
سلام

همونطورکه دوستمون گفتن برای اینکار لازم نیست شما پروژه های متفاوت MVC تعریف کنید؛ رو پروژه موردنظر کلیک راست کرده و Add|Area می زنید، این Area مثل یک پروژه کامل دارای پوشه‌های Model، Views و Controllers خاص خودش هست. برای مسیریابی اولیه هم در تابع RegisterRoutes غیر از تعریف {controller}/{action}/{id} شما میتونید پارامتر چهارمی هم بدین که شامل نام‌ فضایی هست که جهت یافتن کنترلرهایی که باید توسط این مسیریابی پیدا شوند؛ تعریف میشن. یعنی فایل Global.asax.cs باز کنید (در MVC 4 فایل RouteConfig.cs هست) و بازاء هر Area که میخواین بصورت زیر تغییر بدین :

routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {
controller = "Home",
action = "Index",
id = UrlParameter.Optional } // Parameter defaults
, namespaces: new[] {
"SecondArea.Controllers"
}
);

هرجا در View ها هم که خواستید به Area موردنظرتون لینک بدین با ActionLink به صورت زیر میتونید مسیریابی رو به MVC بفهمونید:

@Html.ActionLink(
linkText: "SecondArea",
actionName: "Index",
controllerName: "Home",
routeValues: new {
Area = "SecondArea" } ,
htmlAttributes: null)


واسه اکشن ها هم به همین ترتیب هست:
RedirectToAction("Index", "Home", new { Area = "SecondArea" });


اگه نمیخواین از AuthorizeAttribute (http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.108).aspx) استفاده کنید و برای قطعه کد خاصی در اکشن، سطح دسترسی لازم هست، میتونید از User.Identity.IsAuthenticated یا برای کاربر/رول خاص از User.Equals و User.IsInRole و ... استفاده کنید.


فرضاً برای معادل کد زیر در Asp.net:
<span id="filter">
Current List Filter:
<asp:DropDownList ID="DropDownList1"
AutoPostBack="true"
runat="server">
<asp:ListItem Text="Id" Value="1" />
<asp:ListItem Text="Title" Value="xxxxx" />
</asp:DropDownList>
</span>
می تونید از onchange بصورت زیر استفاده کنید:
<%= Html.DropDownList("DropDownList1",
new SelectList( (IEnumerable)ViewData["myData"], "Id", "Title" ),
new { onchange = "this.form.submit();" }) %>
که البته کار درستی نیست و میشه همون برنامه نویسی SMART UI که قرار هست در MVC کاملاً ازش پرهیز کنیم؛ درستش اینه که چنین کارهایی در Controller مدیریت بشن و هیچ منطقی نباید در View ها داشته باشیم؛ صرفاً عملیات نمایشی اینجا صورت میگیره
موفق باشید./

faridnoz
پنج شنبه 24 اسفند 1391, 10:36 صبح
سلام

فرضاً برای معادل کد زیر در Asp.net:
<span id="filter">
Current List Filter:
<asp:DropDownList ID="DropDownList1"
AutoPostBack="true"
runat="server">
<asp:ListItem Text="Id" Value="1" />
<asp:ListItem Text="Title" Value="xxxxx" />
</asp:DropDownList>
</span>
می تونید از onchange بصورت زیر استفاده کنید:
<%= Html.DropDownList("DropDownList1",
new SelectList( (IEnumerable)ViewData["myData"], "Id", "Title" ),
new { onchange = "this.form.submit();" }) %>
که البته کار درستی نیست و میشه همون برنامه نویسی SMART UI که قرار هست در MVC کاملاً ازش پرهیز کنیم؛ درستش اینه که چنین کارهایی در Controller مدیریت بشن و هیچ منطقی نباید در View ها داشته باشیم؛ صرفاً عملیات نمایشی اینجا صورت میگیره

موفق باشید./
ممنون از پاسختون
میشه درمورد بخش سوم بیشتر توضیح بدید
که چطور تو controller این کار انجام بدم

Saeed_m_Farid
پنج شنبه 24 اسفند 1391, 13:07 عصر
میشه درمورد بخش سوم بیشتر توضیح بدید
که چطور تو controller این کار انجام بدم
بستگی به کارتون داره، میخواین چکار کنید؟ اینکه یه postback به سرور بفرستید تا view رو دوباره با تغییرات شما بسازه یا با javascript وقتی تیک میزنید عناصر فرم رو تغییر بدین و ... که خوب دومی راحت تر و سرراست تر هست ولی درنهایت شما هنوز از javascript استفاده میکنید.
اینکار بیشتر به دید برنامه نویسی مربوط هست تا کد؛ می تونید با JQuery یکم View رو پرمایه تر و قوی تر درست کنید. کلاً اگه منطق برنامه/پروژه بیشتر با postback درگیر هست، بنظر من بهتره از Win forms استفاده کنید.