如何更新/编辑记录Asp.net MVC

时间:2017-11-01 17:03:36

标签: asp.net asp.net-mvc

我遇到此问题,我无法更新数据。它将转到编辑页面,但是当我点击更新时,它只是重定向到另一页,并且没有显示数据。如何在重定向时显示更新的数据。更新课程问题

控制器:

 private Issue getIssue
    {
        get
        {
            Issue issue = (Issue)Session["Issue"];
            if (issue == null)
            {
                issue = new Issue();
                Session["Issue"] = issue;
            }
            return issue;

        }

    }


    public ActionResult Edit(int id)
    {

        getIssue.item = getIssue.items[id - 1];//Returns the requested item for editing
        return View(getIssue);
    }

    [HttpPost]
    public ActionResult Edit(Issue issue)
    {
        int indx = issue.item.lineNum - 1;
        getIssue.items[indx] = issue.item;
        //return View(getIssue);
        return RedirectToAction("IssueItem", "Issue");
   }

查看:

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Issue</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })



    <fieldset>
        <div class="form-horizontal">

            <hr />
            <div class="form-group">
                <div class="form-group">
                    @Html.LabelFor(model => model.item.itemNumber, htmlAttributes: new { @class = "control-label col-md-2" })
                    @Html.TextBoxFor(model => model.item.itemNumber, null, new { @id = "itemNumber", @class = "form-control", @readonly = "readonly", })
                    @Html.ValidationMessageFor(model => model.item.itemNumber, "", new { @class = "text-danger" })
                </div>

                <div class="form-group">
                    @Html.LabelFor(model => model.item.description, htmlAttributes: new { @class = "control-label col-md-2" })
                    @Html.TextBoxFor(model => model.item.description, null, new { @id = "description", @class = "form-control", @readonly = "readonly", })
                    @*  @Html.EditorFor(model => model.item.description, new { @class = "control-label col-md-2", @id = "txtItem" })*@
                    @Html.ValidationMessageFor(model => model.item.description, "", new { @class = "text-danger" })
                </div>


<div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Update" name="Update" class="btn btn-default" />
                    <input type="button" value="Cancel" name="Cancel" onclick="location.href='@Url.Action("IssueItem","Issue")' " class="btn btn-default" />
                </div>

            </div>

3 个答案:

答案 0 :(得分:0)

假设getIssue.items[indx] = issue.item;更新项目

更新项目后,服务器必须:

  1. 知道哪个项目更新
  2. 将用户重定向到更新的项目。
  3. 重定向RedirectToAction("IssueItem", "Issue");重定向到generc网址,而不是特定网址。这就是问题所在。

    1. 让我们获取更新的项目。您不使用Id,但在indx方法上使用[HttpPost]。所以我们知道indx有项目的标识号。

    2. 让我们将用户重定向到项目页面。我不了解你的项目,所以我假设有一个Detail页面。我们获取indx变量并将其作为arg传递给redirect:例如RedirectToAction("Detail",new {id = indx});这应该有用。

答案 1 :(得分:0)

我注意到的第一件事是你没有在视图中保存要更新的对象的标识符,你应该使用Html.HiddenFor,如下所示:

@Html.HiddenFor(x => x.lineNum)

我假设lineNum是你对象的标识符。

答案 2 :(得分:0)

问题在于我使用会话清除字段,因此每次重定向该会话时都会被清除;我删除以后它工作正常