2

以下に、コントローラー、モデル、およびビューを示します。実行後、グリッドに値が表示されますが、同じページで値を編集して値を削除する必要があります。編集の場合、別のインデックスを作成して削除するという例を検索して見ましたが、別のページではなく同じページで編集および削除する必要があります。解決策を教えてください。

コントローラ:

public ActionResult Index()
        {
            var PersonList = new List<Person>()
            {
            new Person(){Name="A", Age=20,Id =1},
            new Person(){Name="B",Age=45,Id =2},
            new Person(){Name="C", Age=30,Id =3},
            new Person(){Name="D",Age=55,Id =4},
            new Person(){Name="E", Age=30,Id =5},
            new Person(){Name="F",Age=25,Id =6},
            new Person(){Name="G", Age=30,Id =7},
            new Person(){Name="H",Age=25,Id =8},
            };

            return View(PersonList);
        }

クラス :

public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

意見 :

@model IEnumerable<edit.Models.Person>

@{
    ViewBag.Title = "Index";
}

<html>
<head>
<title>Index</title>
<style type="text/css">
.webGrid { margin: 4px; border-collapse: collapse; width: 300px; }
.header { background-color: #E8E8E8; font-weight: bold; color: #FFF; }
.webGrid th, .webGrid td { border: 1px solid #C0C0C0; padding: 5px; }
.alt { background-color: #E8E8E8; color: #000; }
.person { width: 200px; font-weight:bold;}
</style>
</head>
<body>
@{
var grid = new WebGrid(Model, canPage: true, rowsPerPage: 5);
grid.Pager(WebGridPagerModes.NextPrevious);
@grid.GetHtml(tableStyle: "webGrid",
headerStyle: "header",
alternatingRowStyle: "alt",
columns: grid.Columns(
grid.Column("Name", "Given Name", canSort: true, format:@<b>@item.Name</b>, style: "person"),
grid.Column("Age", "How Old?", canSort: true)
));
}
</body>
</html>
4

4 に答える 4

5

@Yasser、GET リンクを介して DELETE を実装するのは非常に危険です。ページをクロールする検索エンジンによって、すべての情報が削除される可能性があります。

POST 操作を実装する方がはるかに優れています。次に例を示します。

ビューで:

@functions{
  string Delete(dynamic p)
  {
    string actionController = Url.Action("Delete", "Admin", new {id=p.AccountId});
    return "<form style='display:inline;' method='post' action='" + actionController + "'><input type='submit' value='Delete' onclick=\"return confirm('Are you sure?')\"/></form>";
  }
}

...
grid.Column(header: "", format: p => Html.Raw(Delete(p)))

コントローラーで:

[HttpPost]
public ActionResult Delete(int id)
{
   PerformDelete(id);
   return RedirectToAction("Index");
}
于 2012-12-23T12:47:51.170 に答える
3

ここから始められるのは、

最初に、webgrid の各レコードと共に「編集」と「削除」という 2 つのアクション リンクを生成する必要があります。

それについては、このチュートリアルを参照してください。

このようなもの

grid.Column(format: (item) => Html.ActionLink("Edit", "ActionName", new { param1 = "send id here", param2 = "xtra param" }))
grid.Column(format: (item) => Html.ActionLink("Delete", "ActionName2", new { param1 = "hello", param2 = "bye" }))

お役に立てれば。

于 2012-08-22T06:38:11.407 に答える
2

どうぞ...

http://www.dotnet-tricks.com/Tutorial/mvc/E2S9150113-Enhancing-WebGrid-with-Insert-Update-and-Delete-Operations.html

これを探していると思います。

于 2013-11-18T07:03:01.593 に答える
1

asp.net mvc と knockoutjs を使用して、このインライン編集可能なグリッドビューを試すことができます: www.anhbui.net/blog?id=kojs-1

于 2015-04-16T15:33:55.137 に答える