Конвертировать простую ASP.NET WebForm в MVC - PullRequest
1 голос
/ 14 сентября 2011

У меня есть простая страница asp.net:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            rptTable.DataSource = GetDataFromDB();
            rptTable.DataBind();
        }
    }

    private DataTable GetDataFromDB()
    {
        DataTable table = new DataTable();
        table.Columns.Add("Id", typeof(int));
        table.Columns.Add("Name", typeof(string));

        table.Rows.Add(1, "HDD");
        table.Rows.Add(2, "Video");
        table.Rows.Add(3, "RAM");

        return table;
    }

    protected void rptTable_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        TextBox tbName = (TextBox)e.Item.FindControl("tbName");
        int id = Convert.ToInt32(e.CommandArgument);
        string name = tbName.Text;

        //Category.Save(int id, string name)
        //Rebuild Repeater
    }

}

и код aspx:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table>
        <asp:Repeater ID="rptTable" runat="server" OnItemCommand="rptTable_ItemCommand">
            <ItemTemplate>
                <tr>
                    <td>
                        <%#Eval("id")%>
                    </td>
                    <td>
                        <asp:TextBox ID="tbName" runat="server" Text='<%#Eval("Name")%>'></asp:TextBox>
                    </td>
                    <td>
                        <asp:Button ID="btnSave" runat="server" Text="Save" CommandArgument='<%#Eval("id")%>' />
                    </td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
        </table>
    </div>
    </form>
</body>
</html>

Он работает как простая сетка, и вы можете редактировать данные непосредственно в сетке.

Как я могу реализовать ту же логику в MVC? Спасибо!

1 Ответ

1 голос
/ 14 сентября 2011

Чтобы реплицировать функциональность asp: Repeater в приложении MVC, вы обычно используете цикл foreach с текстовыми полями в привязке к свойствам модели.

Однако вы можете, если действительно хотите, включить элемент управления asp: repeater вприложение MVC, но оно не будет работать так, как вы ожидаете, если оно будет зависеть от обратных передач.

Если это простой элемент управления только для чтения, вы можете добавить что-то вроде следующего:

<scipt runat="server">
    protected void Page_Load(object sender, EventArgs e) {
        rptTable.DataSource = ViewData["yourViewDataList"];
        rptTable.DataBind();
    }
</script>

Это предполагает, что у вас есть что-то во ViewData, которое может быть привязано к базе данных, поэтому для этого вам нужно создать метод контроллера для создания вашей DataTable, как вы это делали в GetDataFromDB () '

Я не буду вдаваться в полную реализацию, но на высоком уровне, вот как вы могли бы использовать элемент управления в MVC.

...