为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
幕布斯7119047 2021-04-08 22:17:07
因此,我正在创建一个基本的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位置而不是所选位置。有任何想法吗?
查看完整描述

2 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

是的,你是对的。它始终处于0位置。在您的视图中,将@ Model.pos更改为@ Html.LabelFor(m => m.pos),它将进行两种方式的绑定,当您在控制器中访问pos时,它将保留该值而不是0。我已经更改了您的视图代码。希望这可以帮助。


    @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/>

    @Html.LabelFor(m => m.pos)


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

}


查看完整回答
反对 回复 2021-04-17
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

我认为您在getEl(int i)功能上犯了一个错误。您需要使用特定的ID来获得朋友。可以通过linq表达式轻松找到该元素:


 public FriendModel getEl(int i)

 {

     return lista.Where(f => f.id == i).FirstOrDefault();

 }

当您可以使用元素的唯一ID时,对象在列表中的位置并不重要。


查看完整回答
反对 回复 2021-04-17
  • 2 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信