# Remote Binding

Develop powerful and lightweight web applications using ASP.NET MVC controls. Learn more about the ComponentOne MVC controls in ASP.NET MVC documentation.

## Content

The MultiRow control allows you to retrieve data directly using **C1JSONRequest**. This specifies remote data URLs, which include the server, table and columns. The arrays returned are used as data sources for **CollectionView** objects.
[CollectionViewHelper](/componentone/api/mvc/online-mvc/dotnet-framework-api/C1.Web.Mvc/C1.Web.Mvc.CollectionViewHelper.html) is a static class that enables collections to have editing, filtering, grouping, and sorting services. This class also includes the following methods:

* [Read()](/componentone/api/mvc/online-mvc/dotnet-framework-api/C1.Web.Mvc/C1.Web.Mvc.CollectionViewHelper.Read.html): Retrieves data from the collection.
* [Edit()](/componentone/api/mvc/online-mvc/dotnet-framework-api/C1.Web.Mvc/C1.Web.Mvc.CollectionViewHelper.Edit.html): Enables excel-style editing in MultiRow.
* [BatchEdit()](/componentone/api/mvc/online-mvc/dotnet-framework-api/C1.Web.Mvc/C1.Web.Mvc.CollectionViewHelper.BatchEdit.html): Allows editing multiple items at a time.

The `Bind` property in MultiRow is used to bind it to a collection by passing an action URL method to carry out a specific operation.

This topic demonstrates how to retrieve data from an existing data source remotely. This is useful for developing data-intensive applications and scenarios for representing data as dashboards. The following image shows how MultiRow control appears after making C1JSON request to fetch data from a model. This example uses the sample created in the [Quick Start](/componentone/docs/mvc/online-mvc/workwithcontrols/MultiRow/QuickStartAddDataMultiRow) topic.

![RemoteBind](https://cdn.mescius.io/document-site-files/images/2b3ac322-100e-4637-958d-fb40dcda3f44/images/multirow.png)

#### In Code

Include the following MVC references in RemoteBindController.cs

```csharp
using <ApplicationName>.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using C1.Web.Mvc;
using C1.Web.Mvc.Serialization;
```

**RemoteBindController.cs**

```csharp
public partial class MultiRowController : Controller
 {
     // GET: MultiRow
     public ActionResult RemoteBind_Read([C1JsonRequest] CollectionViewRequest<Orders.Order> requestData)
     {
     return this.C1Json(CollectionViewHelper.Read(requestData, Orders.GetOrders()));
     }
        public ActionResult Index()
     {
        return View();
     }
    }
```

**RemoteBind.cshtml**

```razor
@using <ApplicationName>.Models;
@(Html.C1().MultiRow<Orders.Order>()
    .Bind(Url.Action("RemoteBind_Read"))
    .AllowSorting(true)
    .IsReadOnly(true)
    .CssClass("multirow")
    .LayoutDefinition(ld =>
    {
        ld.Add().Header("Order").Colspan(2).Cells(cells =>
        {
        cells.Add(cell => cell.Binding("Id").Header("ID").CssClass("id").Width("150"))
        .Add(cell => cell.Binding("Date").Header("Ordered").Width("150"))
        .Add(cell => cell.Binding("Amount").Header("Amount").Format("c").CssClass("amount"))
        .Add(cell => cell.Binding("ShippedDate").Header("Shipped"));
        });
        ld.Add().Header("Customer").Colspan(3).Cells(cells =>
        {
            cells.Add(cell => cell.Binding("Customer.Name").Name("CustomerName").Header("Customer").Width("200"))
        .Add(cell => cell.Binding("Customer.Email").Name("CustomerEmail").Header("Customer Email").Colspan(2))
        .Add(cell => cell.Binding("Customer.Address").Name("CustomerAddress").Header("Address"))
        .Add(cell => cell.Binding("Customer.City").Name("CustomerCity").Header("City"))
        .Add(cell => cell.Binding("Customer.State").Name("CustomerState").Header("State"));
        });
    }))
```

## See Also

[Model Binding](/componentone/docs/mvc/online-mvc/workwithcontrols/MultiRow/workwithmultirow/DataBindingMultiRow/ModelBindingMultiRow)

[Quick Start](/componentone/docs/mvc/online-mvc/workwithcontrols/MultiRow/QuickStartAddDataMultiRow)