ASP.NET MVC编辑功能不起作用

因此,我正在创建一个基本的MVC ASP.NET应用程序,该应用程序可以创建好友,显示好友并允许您编辑好友信息。


该模型是Friend类,每个朋友都有自己的名称,id,位置和位置。


public class FriendModel

    {

    [Required]

    public int id { set; get; }

    [Required]

    public String mesto { set; get; }

    [Required]

    public String name { set; get; }

    public int pos { set; get; }

}

每当我将新朋友添加到FriendList对象内的列表中时,启动控制器时,该列表会以静态形式创建一次:


public class FriendList

{

    private List<FriendModel> lista;

    private int count;


    public FriendList()

    {

        lista = new List<FriendModel>();

        count = 0;

    }


    public FriendModel getEl(int i)

    {

        return lista.ElementAt(i);

    }


    public void add(FriendModel m)

    {

        m.pos = count;

        count++;

        lista.Add(m);

    }


    public List<FriendModel> getList()

    {

        return lista;

    }

}

在控制器内部,HttpGet和HttpPost操作如下所示:


[HttpGet]

    public ActionResult Edit(int id)

    {

        FriendModel fm = lista.getEl(id);

        return View(fm);

    }


    [HttpPost]

    public ActionResult Edit(FriendModel fm)

    {

        FriendModel model = lista.getEl(fm.pos);

        model.id = fm.id;

        model.name = fm.name;

        model.mesto = fm.mesto;

        return Redirect("/Friend/ShowAll");

    }

并且编辑视图如下所示:


    @model Lab1.Models.FriendModel



    @{

        ViewBag.Title = "Edit";

    }


    <h2>Edit</h2>


    @using (Html.BeginForm())

    {

        <label>Name</label><br />

        <div>@Html.TextBoxFor(m => m.name)</div>


        <label>Id</label><br />

        <div>@Html.TextBoxFor(m => m.id)</div>


        <label>Place</label><br />

        <div>@Html.TextBoxFor(m => m.mesto)</div>

        <br/>

        <label>@Model.pos</label>

        <input id="Submit1" type="submit" value="Edit" />

    }

问题是,每当我编辑某项内容时,它都不会更改为我要编辑的所选项目,但总是使用我在所选项目中编辑的信息来编辑列表中的第一个项目,而未选择所选项目正在编辑。


特别是在这行代码中:


FriendModel model = lista.getEl(fm.pos);

似乎使对象位于列表的0位置而不是所选位置。


有任何想法吗?


幕布斯7119047
浏览 189回答 2
2回答

梦里花落0921

是的,你是对的。它始终处于0位置。在您的视图中,将@ Model.pos更改为@ Html.LabelFor(m => m.pos),它将进行两种方式的绑定,当您在控制器中访问pos时,它将保留该值而不是0。我已经更改了您的视图代码。希望这可以帮助。&nbsp; &nbsp; @model Lab1.Models.FriendModel@{&nbsp; &nbsp; ViewBag.Title = "Edit";}<h2>Edit</h2>@using (Html.BeginForm()){&nbsp; &nbsp; <label>Name</label><br />&nbsp; &nbsp; <div>@Html.TextBoxFor(m => m.name)</div>&nbsp; &nbsp; <label>Id</label><br />&nbsp; &nbsp; <div>@Html.TextBoxFor(m => m.id)</div>&nbsp; &nbsp; <label>Place</label><br />&nbsp; &nbsp; <div>@Html.TextBoxFor(m => m.mesto)</div>&nbsp; &nbsp; <br/>&nbsp; &nbsp; @Html.LabelFor(m => m.pos)&nbsp; &nbsp; <input id="Submit1" type="submit" value="Edit" />}

qq_花开花谢_0

我认为您在getEl(int i)功能上犯了一个错误。您需要使用特定的ID来获得朋友。可以通过linq表达式轻松找到该元素:&nbsp;public FriendModel getEl(int i)&nbsp;{&nbsp; &nbsp; &nbsp;return lista.Where(f => f.id == i).FirstOrDefault();&nbsp;}当您可以使用元素的唯一ID时,对象在列表中的位置并不重要。
打开App,查看更多内容
随时随地看视频慕课网APP