0

私は Asp.net MVC に非常に慣れていません。データバインディング、インライン編集、並べ替え、ページングにリピーターとグリッドビューを広く使用する Web フォームでの作業経験があります。

しかし、今では MVC がすべて異なるため、ASP.net サーバー コントロールを使用することは想定されていません。そのため、MVC のグリッド ビューの代替手段を探し始めました。しかし、私はどちらかを選択するのに苦労していました。

1 つのオプションは Jqgrid ですが、JSON に関する知識はあまりありません。もう 1 つは、MVC の Web グリッド ヘルパーです。

ここでの私の疑問は、Web グリッド ヘルパーにコントロールを設定し、インライン編集を行うことができるかどうかです。

私は MVC のこの部分について非常に心配しており、MVC は Web フォームと比較して生活をより困難にしていますが、クリーンな html 出力や美しい URL などの他の理由から、MVC を使用したいと考えています。

したがって、上記の要件に対してどのコントロールが好ましいかについて、貴重な提案をしてください。

4

3 に答える 3

2

MVC について間違った考え方をしていると思います (Web フォームから移行する場合はよくあることです)。

GridView の例では、それを html テーブルと比較できます。MVC で html テーブルを作成するには、次のものが必要です。

@* This tells the page what object you are supplying as the data for the page *@
@model IEnumerable<MyWebsite.TableDataViewModel>

<table>
    <thead>
        <tr>
            <th>Header 1</th>
            <th>Header 2</th>
            <th>Header 3</th>
            <th>Header 4</th>
        </tr>
    </thead>
    <tbody>
        @* Here we are looping through each item in the 
           Model (defined above) and putting each property 
           in a cell of the table *@
        @foreach(var row in Model)
        {
        <tr>
            <td>@item.Property1</td>
            <td>@item.Property2</td>
            <td>@item.Property3</td>
            <td>@item.Property4</td>
        </tr>
        }
    </tbody>
</table>
于 2013-10-03T14:36:20.653 に答える
2

MVC では、Controller を使用して (View)Model を View にバインドします。ViewModel では、View を表示するために必要なすべてを定義します。ちょっとした例をお見せします。

ビューモデル:

public class CustomerModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string EmailAddress { get; set; }
}

ViewModel を作成するコントローラーのアクション。私db.Customersはデータのソースとして使用しました:

public ActionResult List()
{
    var customerModel = db.Customers.Select(c => new CustomerModel
                                                     {
                                                        Id = c.Id,
                                                        Name = c.Name,
                                                        EmailAddress = c.EmailAddress
                                                     }).ToList();
    return View(customerModel);
}

テーブルを含むビュー。これはデータ バインディング部分です。WebFormsではEval()Bind()here のようなメソッドを使用し、MVC では厳密に型指定されたビューを作成します。

@model IEnumerable<CustomerModel>

<table>
    <tr>
        <th>@Html.DisplayNameFor(m => m.Id)</th>
        <th>@Html.DisplayNameFor(m => m.Name)</th>
        <th>@Html.DisplayNameFor(m => m.EmailAddress)</th>
    </tr>
    @foreach (CustomerModel customer in Model)
    {
        <tr>
            <td>@Html.DisplayFor(m => m.Id)</td>
            <td>@Html.DisplayFor(m => m.Name)</td>
            <td>@Html.DisplayFor(m => m.EmailAddress)</td>
        </tr>
    }
</table>

これで、利用可能な jQuery GridViews プラグインの 1 つを使用して、インライン編集などでグリッドを作成できます。いくつかのオプションについては、この質問を参照してください。

于 2013-10-03T14:37:15.560 に答える
1

Web フォームから MVC に切り替えます。これは、グリッドを行う方法の方が気に入っています。

<script type="text/javascript" charset="utf-8">
            $(document).ready(function () {
                $('#example').dataTable();
            });
</script>

    <table id="example" border="1">
     <thead>
            <tr>
                <th>Bill Number</th>
                <th>LR Number</th>          
                <th>Previous Year</th>
                  <th>Committee Rec</th>
                <th>Committee</th>
                <th>Save</th>
            </tr>
        </thead>
        <tbody>
    @for (int i = 0; i < Model.billVersion.Count; i++)
    {<tr>
        <td>@Html.DisplayFor(model => model.billVersion[i].billNumber)</td>
        <td>@Html.DisplayFor(model => model.billVersion[i].lrNumber)</td>
        <td>@Html.DisplayFor(model => model.billVersion[i].previousYear)</td>
        <td>@Html.DisplayFor(model => model.billVersion[i].committeeRec)</td>
        <td>@Html.CheckBoxFor(model => model.billVersion[i].save_Remove)</td>
    </tr>                
    }
    </tbody>
于 2013-10-03T14:29:34.120 に答える