آموزش ASP.NET MVC 4

RIG

متخصص C#.net
با سلام
بی مقدمه : هدف
**آشنایی با زبان اصلی (EN) در زمینه برنامه نویسی
1- استفاده از MSDN Library > ASP.NET and Visual Studio for Web>ASP.NET MVC 4
1-1- آشنایی با ASP.NET MVC 4
2-1- نحوه کار با ASP.NET MVC 4
3-1 ارتباط با پایگاه داده با ASP.NET MVC 4
ادامه مطالب با شما ..
2- در اینجا می توانید مطالب مربوط به ASP.NET MVC 4 را سوال کنید و از طریق MSDN Library > ASP.NET and Visual Studio for Web>ASP.NET MVC 4 نمونه مثال ها را انجام دهید . در صورت برخورد با هر گونه مشکل می توانید سوال پرسیده و همچنین در صورت ایجاد هر برنامه ای با MVC میتوانید برنامه را در اینجا آپلود کنید تا دیگر دوستان بتوانند از آن استفاده کنند ...
3-هر کس بسته به توان خود دوستان را در این تاپیک راهنمایی کند.
4-هر گونه مطالب مربوط به MVC در این تاپیک مورد قبول است . عکس - فیلم - Sample - پروژه -
5- استفاده از @ - Helper ها و Razor و به فارسی Razer
6- می توانید از aspx نیز استفاده کنید .
7- در صورت دیدن تفاوت بین mvc و asp.net classic آن را بیان کنید...
8- و ....
به هر حال هر گونه کمک به دیگر دوستان را دریغ نفرمایید .

mvc.jpg
 
آخرین ویرایش:

RIG

متخصص C#.net
دسترسی به MVC در IDE

دسترسی به MVC در IDE

VS2012Templates.jpg

Tamplate > visual c# > web Visual Studio 2012
 

moradaliyan

عضو جدید
View Engine ها در MVC4

View Engine ها در MVC4

  • View Engine ها :
در MVC چند View Engine وجود دارد ؟ 2 عدد.

  1. Web Forms
  2. Razor
فرق این دو در چیست ؟
در Web Forms یعنی زمانی که پسوند View های ما .aspx بود زمانی که یک تابع در Code Behind یا Class وجود داشت برای فراخوانی آن تابع در Markup باید چه می نوشتیم ؟
کد:
<%#DoWork()%>
ولی در Razor به این صورت
کد:
@DoWork()
می نویسیم مشاهده می کنیم که کار با Razor راحت تر است.
 

moradaliyan

عضو جدید
Razor چیست ؟

Razor چیست ؟

اگر بخواهیم یک تعریف کاملا ساده و قابل فهم برای همه داشته باشیم Razor یعنی @ بگذارید و کد سی شارپ بنویسید.
مثال :
کد:
@Model.Name
 

moradaliyan

عضو جدید
ViewBag چیست؟

ViewBag چیست؟

یکی از راه های انتقال اطلاعات بین کنترلر و View استفاده از ViewBag می باشد. ViewBag یک تایپ داینامیک است که اطلاعات را درون خودش نگه داشته و قابل فراخوانی از طریق View می باشد.
مثال :
یک متد از نوع ActionResult به نام About از کنترلر Home داریم(فولدر Contrller و فایل HomeController.cs) که داخل بدنه آن کد های زیر می نویسیم :
کد:
public ActionResult About()
        {
            ViewBag.Location = "Tehran,Iran";
            return View();
        }
در ادامه فایل About.cshtm را از داخل فولدر Views ، فولدر Home باز کرده و اطلاعات موجود در ViewBag را فراخوانی می کنیم :
کد:
<div>Location:@ViewBag.Location</div>
حال کنترلر Home و View ، About را به صورت زیر اجرا و نتیجه را مشاهده نمائید :
کد:
/Home/About
 

moradaliyan

عضو جدید
View های Strongly Typed در MVC4

View های Strongly Typed در MVC4

یکی دیگر از راه های معقول و پر کاربرد برای انتقال اطلاعات بین کنترلر و View استفاده از مدل هاست برای درک این موضوع کار را با یک مثال ادامه می دهیم.
داخل فولدر Models در root پروژه یک کلاس به نام AboutModel اضافه می کنیم و فیلد های زیر را به آن اضافه می کنیم:
کد:
namespace OdeToFood.Models
{
    public class AboutModel
    {
        public string Name { get; set; }
        public string Location { get; set; }
    }
}
حال پروژه را Build کرده و داخل کنترلر Home ، ویو About به صورت زیر از کلاس ساخته شده object (نمونه) می سازیم تا به فیلد های Name و Location دسترسی داشته باشیم به صورت زیر :
کد:
public ActionResult About()
        {
            var model = new AboutModel();
            model.Name = "Morad";
            model.Location = "Tehran,Iran";
            return View(model);
        }
در ادامه داخل فایل About.cshtml مدل مورد نظر را در بالای صفحه با استفاده از @model به صورت زیر معرفی می کنیم و بعد با استفاده از @Model به اطلاعات فیلد ها دست می یابیم :
کد:
@model OdeToFood.Models.AboutModel

@{
    ViewBag.Title = "About";
}

<hgroup class="title">
    <h1>@ViewBag.Title.</h1>
    <h2>@Model.Name</h2>
</hgroup>

<div>Location:@Model.Location</div>
برنامه را اجرا و نتیجه را مشاهده نمائید :
کد:
/Home/About
 
آخرین ویرایش:

moradaliyan

عضو جدید
پاس دادن یک لیست از کلاس به View

پاس دادن یک لیست از کلاس به View

کلاس AboutModel.cs را در نظر بگیرید این بار داخل کنترلر Home یک ActionResult به نام StronglyTypedExample ایجاد می کنیم و این بار یک نمونه از جنس List از کلاس AboutModel می سازیم :
کد:
public ActionResult StronglyTypedExample()
        {
            List<AboutModel> model = new List<AboutModel>()
            {
                new AboutModel(){Name = "Morad",Location = "Tehran,Iran"},
                new AboutModel(){Name = "Bahareh",Location = "Esfehan,Iran"},
                new AboutModel(){Name = "Bivafa",Location = "Mazandaran,Iran"},
            };
            return View(model);
        }
حال بر روی View کلیک راست کرده و داخل پنجره باز شده ، پس از انتخاب یک نام مناسب در اینجا(StronglyTypedExample) بر روی دکمه Add کلیک می کنیم تا View مورد نظر ایجاد شود.
حال داخل View که stronglyTypedExample نام دارد در بالای فایل این بار مدل را که از جنس Collection می باشد را به صورت IEnumerable معرفی می کنیم چون داخل View لیست قابل شناسایی نمی باشد و سپس به اطلاعات آن با استفاده از حلقه foreach دست می یابیم :
کد:
@model IEnumerable<OdeToFood.Models.AboutModel>
@{
    ViewBag.Title = "StronglyTypedExample";
}

<h2>StronglyTypedExample</h2>
<body>
    <div>
        @foreach (var data in Model)
        {
            <p>Name:@data.Name</p>
            <p>Location:@data.Location</p>
            <hr/>
        }
    </div>
</body>
در آخر برنامه را اجرا می کنیم :
کد:
/Home/StronglyTypedExample
 

moradaliyan

عضو جدید
خواندن کوئری استرینگ در MVC4

خواندن کوئری استرینگ در MVC4

در Webforms برای خواندن کوئری استرینگ پارامتر دار چه می نوشتیم :
کد:
  [FONT=Consolas]Request.QueryString[[COLOR=#C00000]"Name"[/COLOR]];[/FONT]
برای خواندن مقدار چیزهایی وب فرم پست شده است چه می نوشتیم :
کد:
Request.form
برای خواندن پارامتر های Route چه می نوشتیم :
کد:
Route.datavalue();
اما در MVC4 :
به عنوان مثال می خواهیم مقدار زیر را بخوانیم :
کد:
/ShowData/GetName?Name=Morad
برای انجام این کار کافیست به متد مورد نظر پارامتر Name را اضافه کنیم :
کد:
  [LEFT][COLOR=blue][FONT=Consolas]public[/FONT][/COLOR][COLOR=#2B91AF][FONT=Consolas]ActionResult[/FONT][/COLOR][COLOR=gray][FONT=Consolas] GetName([/FONT][/COLOR][COLOR=blue][FONT=Consolas]string[/FONT][/COLOR][COLOR=gray][FONT=Consolas] Name)[/FONT][/COLOR]
[/LEFT]
  [LEFT][COLOR=gray][FONT=Consolas]{[/FONT][/COLOR]
[/LEFT]
  [LEFT][COLOR=blue][FONT=Consolas]return[/FONT][/COLOR][COLOR=gray][FONT=Consolas] View();[/FONT][/COLOR]
[/LEFT]
  [LEFT][COLOR=gray][FONT=Consolas]}[/FONT][/COLOR]
[/LEFT]
متوجه می شویم که برای خواندن مقدار کوئری استرینگ نیازی به نوشتن کد نیست خودش مقدار را می خواند.
 

moradaliyan

عضو جدید
Html Emcoding

Html Emcoding

قبل از گفتن مطلبی در مورد این موضوع باید به یک سئوال اساسی پاسخ داد که بدون استفاده از مدل می توان مقداری را به View منتقل کرد؟خوب جواب ساده است بله ، می بایست از ViewBag استفاده کنیم.
خوب Html Encoding را با یک مثال توضیح می دهم.
پس از ایجاد یک پروژه جدید MVC4 یک متد داخل کنترلر Home اضافه می کنیم به صورت زیر :


کد:
public ActionResult HtmlEncoding()
{
    ViewBag.Test = "<h1>Hello Morad<h1>";
    return View();
}
خوب یک View برای این متد Add می کنیم و به عبارت نوشته شده به صورت زیر دسترسی خواهیم داشت :
کد:
<div>
        @ViewBag.Test
</div>
اگر خروجی را مشاهده کنیم متوجه می شویم که عبارت Hello Morad به عنوان یک هدر در نظر گرفته نشده است ، ولی هدف ما نمایش به صورت هدر بود به این مکانیزم Automatic Html Encoding گفته می شود یعنی هر چیزی که داخل تگ باشد Encode شده و بعد به داخل صفحه منتقل می شود.اگر بخواهیم که عبارت نوشته شده به صورت یک هدر نمایش داده شود باید داخل View برای دسترسی به عبارت نوشته شده به صورت زیر کد بنویسیم:
کد:
<div>
        @Html.Raw(ViewBag.Test)
</div>
 

moradaliyan

عضو جدید
بلوک های کد در MVC

بلوک های کد در MVC

همانطور که قبلا گفته شد برای نوشتن یک دستور C# در View به صورت زیر عمل می کنیم :
کد:
@var str="MoradAliyan";
اما زمانی که قرار است بیش تر از یک دستور بنویسیم بلاک باز می کنیم:
کد:
@{int m=10;
for(int i=0;i<=m;i++)
{
var s=i;
}
 

moradaliyan

عضو جدید
سلام به همه ی دوستان برنامه نویس ، خواهشا با انرژی کار کنید و یک مقدار از دانش خود را در اختیار دیگران قرار دهید تا افرادی مثل من هم یکم انرژی بگیرند ، اگر دوستان همکاری کنند بنده وارد بحث های تخصصی در مورد MVC خواهم شد حتی MVC5 واگرنه احساس می کنم کسی نیازی به اطلاعات در این زمینه ندارد و نوشتن را بی فایده می بینم.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
mvc چیست ؟ چرا mvc ؟ تفاوت بین asp.net mvc و asp.net web form در چیست ؟

mvc چیست ؟ چرا mvc ؟ تفاوت بین asp.net mvc و asp.net web form در چیست ؟

با پیدایش تکنولوژی MVC این ها و هزاران سوال دیگر در ذهن برنامه نویسان وب نقش بست. برنامه نویسانی که تا به آن زمان با تکنولوژی web form کار می کردند.
برای پاسخگویی به سوالات بالا ابتدا می بایست با برخی اصطلاحات آشنا شوید.

View چیست؟
view ها در اصل همان قالب صفحات وب می باشند، همان خروجی ای که باید برای مروگر کاربر ارسال شود. view ها بصورت مستقیم با تگ های html ، کدهای css و js سروکار دارند.

View Engine چیست؟
view engine یا موتورهای نمایش ، هسته اصلی asp.net هستند.
بخشی که وظیفه اش پردازش view ها و دستوراتی است که در داخل view ها نوشته شده است.

در asp.net به دو روش می توان یک وب سایت ایجاد کرد:

  1. با استفاده از تکنولوژی web form
  2. با استفاده از تکنولوژی mvc
در تکنولوژی وب فرم ، view ها درون فایل هایی با پسوند .aspx نگهداری می شوند (در اصل view ها بخش دیزاین صفحاتمان می باشند)
در وب فرم ، view ها بوسیله موتور نمایش ASPX پردازش می شوند.

در تکنولوژی mvc ، ویوها درون فایل هایی با پسوند cshtml. یا vbhtml. می باشند (بسته به اینکه از سی شارپ و یا وی بی برای کد نویسی پروژه استفاده کنین) و از موتور نمایش Razor برای پردازش ویوها استفاده می شود (البته در mvc از موتور aspx هم می تونین استفاده کنین ولی موتور اختصاصی اش Razor است که مخصوصا برای پردازش view های mvc طراحی شده است و به نظرم سرعتشم خیلی بیشتر از aspx باید باشه)

mvc چیست؟
mvc مخفف Model - View - Controller است.
در mvc دیگر فایلی به نام صفحه وجود خارجی و فیزیکی ندارد! و همه چیز بر اساس شی گرایی و کلاس های مختلف بنا شده است.
پروژه های mvc دارای سه بخش اصلی با نام های Model ، View و Controller می باشند.

Model : کلاس های اشیایی که قرار است با آنها در پروژه کار کنیم در این بخش قرار می گیرند.
کلاس هایی مانند Person ، Product ، ShopingCard ، Members و ...

View : همان قالب های html - css - js خروجی هستند که قرار است به کاربران نمایش داده شوند.
(به بیان ساده همون بخش دیزاین صفحات در تکنولوژی web form هستند)

Controller : بخش اصلی mvc و کنترل کننده درخواست ها (http request ها) هستند و مشخص می کنند که وقتی کاربری درخواست مشاهده آدرس http://mysite.com و یا http://mysite.com/product و یا http://mysite/product/list را داد ، چه اطلاعاتی باید به کدام ویو پاس داده شود و سپس خروجی ویو دریافت و برای کاربر ارسال گردد.

نکته جالب در زمان کار با mvc این است که شما در آدرس های مختلف یک سایت پسوندهای معمول aspx. را مشاهده نمی نمایید.
این بدین دلیل است که آدرس صفحات در mvc بدین صورت ترجمه می شود:

http://mysite.com/{controller}/method/data

بنابراین وقتی درخواستی برای مشاهده آدرسی همانند http://mysite/product/list را می دهیم ، در اصل شما متد (تابع) list از کنترلر product را مستقیما فراخوانی (اجرا) می نمایید و خروجی تابع را در مروگر خود مشاهده می نمایید (می توان گفت که خروجی توابع کنترلر ها یک سند کامل html است)

جالب است ؟ یعنی کاربران سایت شما ، با ورود به آدرس های مختلف ، در اصل دارند توابع موجود در کنترلر های سایت شما را فراخوانی می نماییند.
در آموزش های بعد خواهید دید که خروجی متد ها (توابع) کنترلرها از نوع داده ای ActionResult است (محتویان یک سند html کامل).

به راستی که خیلی مهیج و جالب است.... نه ؟


متد Respository :
به بیان ساده ما در پروژه های mvc کدهایی که کار با اطلاعات منابع داده ای (دیتابیس SQL یا ...) را برایمان انجام می دهند را درون بخش Model نمی نویسیم و آنها را در بخش مجزایی می نویسیم تا کدهای آنها با کدهای بخش Model پروژه قاطی نشوند، به این کار که موجب جداسازی کدهای لایه دیتا با کدهای بخش Model می شوند ، اصطلاحا Respository می گویند.

منبع:http://netnic.ir/post/category/66
 

makintach

عضو جدید
سلام دستتون درد نکنه بابت آموزشتون
بنده یه سوال دارم اگه راهنمایی کنین خیلی ممنون می شم
ببینید من یه دیتابیس دارم کامله
حالا میخوام با دیتابیس فرست شروع کنم
حالا مثلا یه دیتابیس دارم واسه news
که شامل id و create time و ....
و جدول دوم news_lang که باآی دی جدول اول در ارتباطه و شامل متن خبر و موضوع خبر و .... است
حالا می تونم توی لیستی که مدل نیوز رو می فرسته فیلدای جدول دوم رو با فور ایچ بخونم
اما نمی دونم واسه ادیت اصلا چکار باید بکنم؟
مثلا من میخوام هم فیلدای جدول اول هم جدول دوم رو توی یه ویو ویرایش کنم
چه کنم؟
ممنون
 

moradaliyan

عضو جدید
سلام دستتون درد نکنه بابت آموزشتون
بنده یه سوال دارم اگه راهنمایی کنین خیلی ممنون می شم
ببینید من یه دیتابیس دارم کامله
حالا میخوام با دیتابیس فرست شروع کنم
حالا مثلا یه دیتابیس دارم واسه news
که شامل id و create time و ....
و جدول دوم news_lang که باآی دی جدول اول در ارتباطه و شامل متن خبر و موضوع خبر و .... است
حالا می تونم توی لیستی که مدل نیوز رو می فرسته فیلدای جدول دوم رو با فور ایچ بخونم
اما نمی دونم واسه ادیت اصلا چکار باید بکنم؟
مثلا من میخوام هم فیلدای جدول اول هم جدول دوم رو توی یه ویو ویرایش کنم
چه کنم؟
ممنون

سلام
داخل فولدر Model یک کلاس درست کن ، بعد داخل کلاس هر جند تا لیست خواستی از داده های مختلف درست کن مثلا از دو تا جدولت بعد این کلاس را پاس بده به View .
 

makintach

عضو جدید
سلام
داخل فولدر Model یک کلاس درست کن ، بعد داخل کلاس هر جند تا لیست خواستی از داده های مختلف درست کن مثلا از دو تا جدولت بعد این کلاس را پاس بده به View .

سلام ممنون از پاسختون
من این کارو امتحان کردم به یه مشکلی خوردم که یادم نیست چی بود
حالا که گفتین ، دوباره می رم چک می کنم احتمالا مشکل از کار من بوده
مرسیــــــــــــــــــــــــــــــِی
 
آخرین ویرایش:

makintach

عضو جدید
سلام
داخل فولدر Model یک کلاس درست کن ، بعد داخل کلاس هر جند تا لیست خواستی از داده های مختلف درست کن مثلا از دو تا جدولت بعد این کلاس را پاس بده به View .

سلام
خیلی ممنون از کمکتون
عااالی بود راهنماییتون
به جاهای خوبی رسیدم
فقط الان یه اررو میده واسه ذخیره کردن
خواهش می کنم این رو هم راهنمایی کنید
ممنونerror.jpg

من چک کردم
مثلا یه دونه فیلد رو توی ویو تغییر دادم
فقط همونو می فرسته
بقیه null ارسال شدن
و مقادیر قبلیشون رو از دیتابیس نخوندهerror2.jpg
منظورم اینه که اون فیلدایی که توی ویو صدا زدم فقط مقادیر اونا ارسال میشه به کنترلر ادیت بقیه نال هستن

من توی mvc خیلی تازه کارم امیدوارم که زیاد بی ربط نگفته باشم :)
 
آخرین ویرایش:

moradaliyan

عضو جدید
سلام
خیلی ممنون از کمکتون
عااالی بود راهنماییتون
به جاهای خوبی رسیدم
فقط الان یه اررو میده واسه ذخیره کردن
خواهش می کنم این رو هم راهنمایی کنید
ممنونمشاهده پیوست 189564

من چک کردم
مثلا یه دونه فیلد رو توی ویو تغییر دادم
فقط همونو می فرسته
بقیه null ارسال شدن
و مقادیر قبلیشون رو از دیتابیس نخوندهمشاهده پیوست 189569
منظورم اینه که اون فیلدایی که توی ویو صدا زدم فقط مقادیر اونا ارسال میشه به کنترلر ادیت بقیه نال هستن

من توی mvc خیلی تازه کارم امیدوارم که زیاد بی ربط نگفته باشم :)

سلام
دقیقا صورت مسئله و کاری را که میخواهید انجام دهید را بنویسید تا اگر بتونم کمکتون کنم تصاویر واضح نیست.
 

makintach

عضو جدید
سلام
دقیقا صورت مسئله و کاری را که میخواهید انجام دهید را بنویسید تا اگر بتونم کمکتون کنم تصاویر واضح نیست.

من میخوام که چند تا جدول رو با هم تغییر بدم
و شما گفتین که یه کلاس جدید ایجاد کنم که اون جدول ها رو بیارم توی اون کلاس بعد اون کلاس رو به ویو ÷اس بدم
من هم همین کارو کردم
خیلی هم عالی پیش رفت
فقط اینکه من همه فیلدارو نمی خوام تغییر بدم که
یه چندتاشو لازم دارم
اونهایی که توی ویو صداشون نمی کنم ، به کنترلر ادیت که برگردونده میشن نال هستن و احتمالااین ارور هم مال اونه
اما اینکه چه باید بکنم رو نمی دونم
http://www.4dekor.ir/files/samim/fmng/images/error.jpg
http://www.4dekor.ir/files/samim/fmng/images/error2.jpg
 

moradaliyan

عضو جدید
استفاده از چند مدل داخل View

استفاده از چند مدل داخل View

سلام
میدونم کار را درست انجام دادی ولی یک بار مرحله به مرحله با هم کار را تکرار می کنیم :
مرحله اول ساخت یک مدل کلی و ساخت پروپرتی از جنس لیست برای هر جدول :
کد:
public class MultiTable
    {
        public List<table1> t1{ get; set; }
        public List<table2> t2{ get; set; }
        public List<table3> t3{ get; set; }
    }

مرحله دوم ساخت یک ActionResult در کنترلر :
کد:
public ActionResult result()
        {
            MultiTable mt = new MultiTable();
            mt.t1= db.table1;
            mt.t2=db.table2;
            mt.t3= db.table3;

            return View(mt);
        }

مرحله سوم فراخوانی :
صدا زدن مدل در View

برای این که با خطا مواجه نشوید شما فیلد هایی را که داخل View صدا نمی زنید را داخل :
کد:
@Html.HeidenFor() قرار دهید.

اگر درست نشد اعلام کنید.
 

makintach

عضو جدید
ModelState.Isvalid

ModelState.Isvalid

سلام خیلی ممنون آقای moradaliyan
چون شما گفتین من با این لیست هم امتحان کردم اما نتونستم درست انجامش بدم
من یه کار دیگه کردم
اگه زحمتی نیست لطفا فایل رو اتچ می کنم ببینید
دستتون درد نکنه با هیدن فیلد اون خطا برطرف شد اما الان توی قسمت
if(ModelState.Isvalid
توی ادیت
مقدارش false رد می شه در نتیجه اصلا ذخیره نمیشه به خط savechanges نمیرسه


مشاهده پیوست dd.rar

خیلی جاهاش امتحانی یه چیزایی نوشتم شما فقط ادیت نیوز رو ببینید ، سپاسگذارم
 

makintach

عضو جدید
اشک ذوق

اشک ذوق

وااای چقدر خوشحاااالم
خیلی ممنون از راهنمایی های بی دریغتون
الان یه سرچی زدم اون ارور رو یافتم
ارور رو هم یادگرفتم که با برک پوینت نشون می ده که دقیقا کدوم فیلد مشکل داره
ارور رو واسه یکی از فیلدام نشون داد
رفتم از هیدن فیلد توی ویو درش آوردم درست شد ذخیره کرد
عالیییییییییییییی بود
:gol::cry: اشک ذوقه :cry:
 

moradaliyan

عضو جدید
وااای چقدر خوشحاااالم
خیلی ممنون از راهنمایی های بی دریغتون
الان یه سرچی زدم اون ارور رو یافتم
ارور رو هم یادگرفتم که با برک پوینت نشون می ده که دقیقا کدوم فیلد مشکل داره
ارور رو واسه یکی از فیلدام نشون داد
رفتم از هیدن فیلد توی ویو درش آوردم درست شد ذخیره کرد
عالیییییییییییییی بود
:gol::cry: اشک ذوقه :cry:

سلام به دوست عزیز
خدا را شکر فقط یک لطفی کنید علت خطا و نحوه ی برطرف کردن خطا را در این قسمت آموزش MVC قرار دهید تا اگر سایر دوستان با این خطا مواجه شدند از راهنمایی شما استفاده کنند.
در ضمن فایل شما را دیدم شما هر وقت خواستید کنترلر بسازید از روی مدل حتما بالای فیلد مربوط به کلید اصلی [Annotation ، [Key رابنویسید.
با تشکر.
 
آخرین ویرایش:

makintach

عضو جدید
توی همون فایلایی که اتچ کردم یکیش newsviewmodel داخلش اون جدولارو گذاشتم یکیش با IEnumerable واسه لیستا یکیش بدون اون
کد:
public newsviewmodel(IEnumerable<Models.news> newsp, IEnumerable<Models.news_lang> newslp)
        {
            news = newsp;
            newslang = newslp;

        }

کد:
public newsviewmodel(news news1, news_lang newslang1)
        {
            // TODO: Complete member initialization
            this.news1 = news1;
            this.newslang1 = newslang1;
        }

واسه ادیت از دومی استفاده میکنه واسه لیست از اولی

و کنترلر این شکلی شد
کد:
public ActionResult Edit(int id = 0)
        {
            Models.news  news= db.news.Find(id);
            Models.news_lang newslang = db.news_lang.Find(id);
           
            newsviewmodel test = new newsviewmodel(news,newslang);
            if (test == null)
            {
                return HttpNotFound();
            }
            return View(test);
        }
کد:
[HttpPost]
        public ActionResult Edit(newsviewmodel test)
        {
            if (ModelState.IsValid)
            {
                db.Entry(test.news1).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(test);
        }

2rHfx.jpg
 
آخرین ویرایش:

makintach

عضو جدید
آقای مرادعلیان واسه key هم که گفتین از یه متا دیتا استفاده کردم واسه همون اونجا key ندارم
ممنون ازتون
 

moradaliyan

عضو جدید
دلیل استفاده از Meta data Buddy Classes در روش Data Base First .

دلیل استفاده از Meta data Buddy Classes در روش Data Base First .

آقای مرادعلیان واسه key هم که گفتین از یه متا دیتا استفاده کردم واسه همون اونجا key ندارم
ممنون ازتون

سلام ، کلاس های متا دیتا فقط برای رفع مشکل در زمان reload شدن فایل ،Text Template و پاک شدن Annotation ها در هریک از کلاس های ساخته شده از جداول موجود در دیتا بیس در روش استفاده از Data Base First می باشد یعنی خواندن Annotation ها از یک کلاس دوست ولی در زمان ساخت کنترلر مدل پاس داده شده همان کلاس بدون Annotation خواهد بود به همین دلیل گاهی اوقات Visual Studio نمی تواند Key را تشخیص دهد به همین دلیل Index.cshtml شما برای ایجاد و ویرایش ممکن است فیلدهای مربوط به کلید اصلی که در بانک Identity آن ها Yes تعریف شده را نمایش دهد.
در کل امیدوارم به عنوان یک MVC کار در این قسمت فعالیت هایی خوبی داشته باشید تا بنده و سایر دوستان از دانش برنامه نویسی شما استفاده کنیم.;)
 

helpsos

عضو جدید
ساخت قالب برای صفحات در MVC

ساخت قالب برای صفحات در MVC

با سلام
برای ساخت قالب صفحات MVC از کجا باید شروع کنیم؟
 

moradaliyan

عضو جدید
MasterPage در MVC

MasterPage در MVC

سلام برای ساخت قالب از اونجا شروع کنید یعنی چه ؟
طراحی قالب اصلی سایت در MVC انچنان تفاوتی با وب فرم نخواهد داشت اگر یک پروژه MVC5 ایجاد نمایید در طراحی قالب از بوت استراپ استفاده شده به به چه قدر خوب این بوت استراپ(راست به چپ هم دارد داخل Nuget بنویسید rtlbootstrap) ، حالا شما می توانید فایل Layout.cshtml را در فولدر Shared باز کنید و تغییرات مورد نظر خود را اعمال کنید. یعنی Master Page سایر ویو ها همین فایل خواهد بود. مگر آنکه شما خود یک Layout جدید اضافه کنید و قالب مورد نظر خودتان را با دانش قبلی خود طراحی نمایید. چه طوری ، این طوری :
داخل فولدر Shared یک Layout اضافه می کنیم و تغییرات زیر را داخل آن انجام می دهیم :
کد:
<!DOCTYPE html>
 
<html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>@ViewBag.Title</title>
    </head>
    <style type="text/css">
        body {
            direction: rtl;
            background-color: gainsboro;
        }
 
        #main {
            width: 960px;
            margin: auto;
            background-color: white;
            min-height: 500px;
        }
 
    </style>
    <body>
        <div id="header">
            @RenderSection("Header",required:false)
        </div>
        <div id="main">
            @RenderBody()
        </div>
        @RenderSection("Footer",required:true)
    </body>
</html>
در MVC یک ContentPlaceHolder اصلی به نام RenderBody داریم که هر چیزی داخل ویوهای فرعی باشد داخل RenderBody می نشیند. حالا از RenderSection به عنوان PlaceHolder های فرعی استفاده می کنیم که وجود آن ها در ChildPage ها ضروری نیست ولی اگر مقدار required برابر true باشد باید در Child Page ها وجود داشته باشد.
در ادامه داخل یک ویو از این Layout استفاده می کنیم ، داخل کنترل Home یک متد به نام ViewLoyout می نویسیم :
کد:
public ActionResult ViewLayout()
{
    ViewBag.Message = "سلام دنیا";
    return View();
}
حال زمان اضافه کردن ویو تیک گزینه use a layout or master page را زده و loyout مورد نظر را انتخاب می کنیم حال در ویو ایجاد شده تغییرات زیر را اعمال می کنیم :
کد:
@section Footer
{
    <p>سلام بر خوبی ها</p>
}
<h2>خوش آمدید</h2>
<p>@ViewBag.Message</p>
 
@section Header
{
    <p>هدر سایت</p>
}
به هر حال دوست عزیز شما می توانید به راحتی قالب مورد نظر خود را طراحی کنید و یا تغییراتی در فایل Loyout.cshtml ایجاد نمایید.;)
 

moradaliyan

عضو جدید
نحوه نمایش یک صفحه ی مناسب در زمان بروز خطا در MVC4

نحوه نمایش یک صفحه ی مناسب در زمان بروز خطا در MVC4

در زمان اجرای یک صفحه گاهی اوقات احتمال بروز خطا وجود دارد برای این که برنامه بتواند یک پیغام مناسب در زمان بروز خطا به کاربر نمایش دهد می تواند ار فایل Error.cshtml موجود در فولدر views/shered/Error.cshtml استفاده نماید و تنطیمات و پیغام های لازم را در این صفحه نوشته و به کاربران نمایش دهد. برای فعال سازی این مکانیزم کافی است به فایل Web.Config موجود در Root رفته و یک خط کد زیر را بنویسیم :
کد:
<system.web>
        <customErrors mode="On"/>
</system.web>
البته این کار را در مرحله آخر زمانی که پروژه را تست کردید و تمام باگ ها و خطاهای کد نویسی را برطرف کردید انجام دهید.;)
 

moradaliyan

عضو جدید
نحوه ی استفاده از Partial , Action در MVC

نحوه ی استفاده از Partial , Action در MVC

اگر بخواهیم برای کسانی که با نام Partial آشنایی ندارند ، Partial را معرفی نماییم باید گفت که Partial View نقش UserControl در MVC را ایفا می کند با یک مثال نحوه ی استفاده را توضیح می دهیم
بر روی فولدر Shared کلیک راست می کنیم گزینه ی Add /New Item و سپس Partial View را انتخاب می کنیم ، یک نام مناسب (_DateTimePartial) وارد می کنیم و بر روی Add کلیک می کنیم. می خواهیم زمان کنونی سیستم را نمایش دهیم :
کد:
@DateTime.Now
حال در ویو یا ویوهای مورد نظر Partial را فراخوانی می کنیم :
کد:
@Html.Partial("_DateTimePartial")
اما Action برای شروع یک سوال اساسی را باید پاسخ دهیم آیا نوشتن کد زیاد به صورت Razor در View مجاز است ؟ بله ، اما کار درستی نیست تا حد امکان این کار را انجام ندهید اگر راه حل یا چاره ای وجود نداشت این کار را انجام دهید چرا این کار را انجام ندهیم ؟ به این دلیل که View ها کامپایل نمی شوند بلکه .cshtml ها در هر بار پردازش می شوند بطبع سرعت پایین خواهد آمد در این مواقع کد مورد نظر را داخل یک Action از یک Controller قرار می دهیم. به این نکته باید توجه نمود که متد مورد نطر باید از نوع ActionResult باشد.
مثال : به عنوان مثال می خواهیم در یک متد اعداد 1 تا 10 را نمایش دهیم و سپس متد مورد نظر را یه یک Html.Action پاس دهیم:
کد:
public ActionResult Result()
{
    string m = "<ul>";
    for (int i = 0; i <=10; i++)
    {
       m += "<li>" + i.ToString() + "</li>";
    }
    m += "</ul>";
    return Content(m);
}
در ادامه بعد از نوشتن متد در ویو مورد نظر از آن استفاده می کنیم :
کد:
@Html.Action("Result");
آموزش ادامه دارد;)
 

Similar threads

بالا