ASP.NET MVC编辑功能无法正常工作

时间:2018-04-12 19:32:10

标签: c# asp.net asp.net-mvc

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

该模型是一个朋友类,每个朋友都有自己的名字,身份,地点和位置。

npm --production=false install

每当我在FriendList对象中的List中添加一个新朋友时,该对象在启动控制器时作为静态创建一次:

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; }
}

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

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]
    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" />
    }

特别是在这行代码中:

[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");
    }

似乎是将对象放在列表的0位置而不是选定的位置。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为你在getEl(int i)函数中犯了一个错误。 您需要获取具有特定ID的朋友。 可以通过linq表达式轻松找到该元素:

 public FriendModel getEl(int i)
 {
     return lista.Where(f => f.id == i).FirstOrDefault();
 }

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

答案 1 :(得分:1)

是的,你是对的。它始终是0位置。在您的视图中将@ Model.pos更改为@ Html.LabelFor(m =&gt; m.pos),它将进行双向绑定,当您在控制器中访问pos时,它将保留值而不是0.我已更改您的视图码。希望这会有所帮助。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td align='center' colspan='3'>
      <h5 class='StepTitle'>Partaker's Gender</h5>
    </td>
  </tr>
  <tr>
    <td align='center' width="100px" class="genders">
      <a class="button male" id="male">
            <span id="toggle-male" class="bgs bg"></span>
          </a>
    </td>
    <td align='center' width="100px" class="genders">
      <a class="button female" id="female">
            <span id="toggle-female" class="bgs bg2"></span>
          </a>
    </td>
  </tr>
</table>