# خواندن اطلاعات از سرور و نمایش آن توسط Angular در ASP.NET MVC

می خواهیم یک مثال ساده از دریافت اطلاعات از سرور و نمایش آن در یک View را توسط AngularJS، با هم بررسی کنیم. همانطور که می‌دانید برای نمایش تعدادی از اشیاء در انگولار می‌توان به این صورت نیز عمل کرد: <

- Published: 2014-02-07
- Language: fa
- Tags: DNTips
- Canonical: https://sirwan.info/blog/fa/dntips-1705

---

> این نوشته نخستین بار در [دات‌نت تیپس](https://www.dntips.ir/post/1705) منتشر شده است.

<div class="postBody">می خواهیم یک مثال ساده از دریافت اطلاعات از سرور و نمایش آن در یک View را توسط AngularJS، با هم بررسی کنیم.<div>همانطور که می‌دانید برای نمایش تعدادی از اشیاء در انگولار می‌توان به این صورت نیز عمل کرد:</div> <div> <div align="left" dir="ltr">
<pre language="XML" name="code">&lt;div ng-init="products=[&#10;     {id:1,name:'product1',price:25000,description:'description of product'},&#10;     {id:2,name:'product2',price:5000,description:'description of product'},&#10;     {id:3,name:'product3',price:5000,description:'description of product'},&#10;     {id:4,name:'product4',price:2000,description:'description of product'},&#10;     {id:5,name:'product5',price:255000,description:'description of product'}&#10;     ]"&gt;&#10;    &lt;div&gt;&#10;        &lt;div&gt;&#10;            &lt;table&gt;&#10;                &lt;tr&gt;&#10;                    &lt;th&gt;Id&lt;/th&gt;&#10;                    &lt;th&gt;Product Name&lt;/th&gt;&#10;                    &lt;th&gt;Price&lt;/th&gt;&#10;                    &lt;th&gt;Description&lt;/th&gt;&#10;                &lt;/tr&gt;&#10;                &lt;tr ng-repeat="product in products"&gt;&#10;                    &lt;td&gt;{{product.id}}&lt;/td&gt;&#10;                    &lt;td&gt;{{product.name}}&lt;/td&gt;&#10;                    &lt;td&gt;{{product.price}}&lt;/td&gt;&#10;                    &lt;td&gt;{{product.description}}&lt;/td&gt;&#10;                &lt;/tr&gt;&#10;            &lt;/table&gt;&#10;        &lt;/div&gt;&#10;    &lt;/div&gt;&#10;&lt;/div&gt;</pre>
 </div>
در کد فوق توسط ویژگی ng-init می‌توانیم داده هایمان را Initialize کنیم و در نهایت توسط ویژگی ng-repeat می‌توانیم داده هایمان را در صفحه نمایش دهیم. این ویژگی دقیقاً مانند یک حلقه foreach عمل میکند؛ مثلا معادل آن در Razor سمت سرور، به این صورت است: <br/> </div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">@foreach (var product in Model.products)&#10;{&#10;    &lt;td&gt;product.id&lt;/td&gt;&#10;    &lt;td&gt;product.name&lt;/td&gt;&#10;    &lt;td&gt;product.price&lt;/td&gt;&#10;    &lt;td&gt;product.description&lt;/td&gt;&#10;}</pre>
 </div>
خوب؛ حالا میخواهیم این اطلاعات را از سمت سرور بخوانیم و به صورت فوق نمایش دهیم. ابتدا مدل مان را به این صورت تعریف می‌کنیم :</div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">namespace AngularAndMvc.Models&#10;{&#10;    public class Product&#10;    {&#10;        public int Id { get; set; }&#10;        public string Name { get; set; }&#10;        public float Price { get; set; }&#10;        public string Description { get; set; }&#10;    }&#10;}</pre>
 </div>
سپس در داخل کنترلر زیر اطلاعات را به صورت in memory data تعریف می‌کنیم (جهت سهولت دموی کار) و به view مورد نظر پاس می‌دهیم. البته شما می‌توانید این اطلاعات را از دیتابیس بخوانید؛ روال کار فرقی نمی‌کند:</div> <div> <div align="left" dir="ltr"> <div align="left" dir="ltr">
<pre language="CSharp" name="code">namespace AngularAndMvc.Controllers&#10;{&#10;    public class ProductController : Controller&#10;    {        &#10;        public ActionResult Index()&#10;        {&#10;            return View("Index", "", GetSerializedProduct());&#10;        }&#10;&#10;        public string GetSerializedProduct()&#10;        {&#10;            var products = new[] &#10;            { &#10;                new Product{Id=1,Name="product1",Price=4500,Description="description of this product"},&#10;                new Product{Id=2,Name="product2",Price=500,Description="description of this product"},&#10;                new Product{Id=3,Name="product3",Price=400,Description="description of this product"},&#10;                new Product{Id=4,Name="product4",Price=5500,Description="description of this product"},&#10;                new Product{Id=5,Name="product5",Price=66500,Description="description of this product"}&#10;            };&#10;            var settings = new JsonSerializerSettings { ContractResolver=new CamelCasePropertyNamesContractResolver()};&#10;            return JsonConvert.SerializeObject(products,Formatting.None,settings);&#10;        }&#10;   }&#10;}</pre>
 </div> </div> <div>همانطور که در کد بالا مشخص است، اطلاعات را به صورت JSON به View مان پاس داده ایم و برای اینکه ابتدای نام مقادیر بازگشتی به صورت حروف بزرگ نباشند (به صورت خودکار تبدیل به camel case شوند) پارامتر settings را برای متد SerializeObject تعیین کرده‌ایم: </div> <div> <div align="left" dir="ltr"> <div align="left" dir="ltr">
<pre language="CSharp" name="code">var settings = new JsonSerializerSettings { ContractResolver=new CamelCasePropertyNamesContractResolver()};&#10;return JsonConvert.SerializeObject(products,Formatting.None,settings);</pre>
 </div> </div> </div>
view را نیز به این صورت تغییر می‌دهیم :</div> <div> <div align="left" dir="ltr">
<pre language="CSharp" name="code">@model string&#10;&lt;div ng-init="products = @Model"&gt;&#10;    &lt;div&gt;&#10;        &lt;div&gt;&#10;            &lt;table&gt;&#10;                &lt;tr&gt;&#10;                    &lt;th&gt;Id&lt;/th&gt;&#10;                    &lt;th&gt;Product Name&lt;/th&gt;&#10;                    &lt;th&gt;Price&lt;/th&gt;&#10;                    &lt;th&gt;Description&lt;/th&gt;&#10;                &lt;/tr&gt;&#10;                &lt;tr ng-repeat="product in products"&gt;&#10;                    &lt;td&gt;{{product.id}}&lt;/td&gt;&#10;                    &lt;td&gt;{{product.name}}&lt;/td&gt;&#10;                    &lt;td&gt;{{product.price}}&lt;/td&gt;&#10;                    &lt;td&gt;{{product.description}}&lt;/td&gt;&#10;                &lt;/tr&gt;&#10;            &lt;/table&gt;&#10;        &lt;/div&gt;&#10;    &lt;/div&gt;&#10;&lt;/div&gt;</pre>
 </div>
تنها تغییری که در کد فوق اعمال شده است، به جای اینکه ویژگی ng-init را به صورت inline مقداردهی کنیم آن را از کنترلر دریافت کرده ایم.</div> <div>در خروجی هم اطلاعات به این صورت نمایش داده می‌شوند :</div> <div> <p> <img src="/img/dntips/e840c7369de2a19686fe.jpg" style="display: block; margin-left: auto; margin-right: auto; cursor: nw-resize;"/> </p> <p>سورس مثال فوق را هم از <a href="https://www.dntips.ir/file/userfile?name=AngularAndMVC.zip">اینجا</a>  می توانید دریافت کنید.</p> </div></div>
