【问题标题】:How to use Multiple HttpPost methods如何使用多个 HttpPost 方法
【发布时间】:2013-07-18 20:46:47
【问题描述】:

我在 MVC4 中创建了一个简单的应用程序,其中我将来自 SQL 服务器的数据压缩到一个 Webgrid 中,其中包含 Name 和 Age 作为列。我有两个用于排序目的的按钮(我知道 Webgrid 中已经有功能,但仍然出于任务目的,我正在这样做)。然后我在每一行旁边都有一个编辑按钮,这将有助于编辑该行,只要我单击编辑按钮行更改为文本框并且编辑按钮被替换为保存和取消按钮,为此我正在使用 JQuery。在控制器中,我有 2 个 Actionresult 方法(INDEX 和 editRow),当我单击以进行排序时将调用一个,当单击以进行编辑时将调用其他方法,但是每当我单击编辑按钮时,都会调用 INDEX,它要求输入按钮值,因此它抛出空指针异常。请帮我解决问题。下面我提供我的代码 提前致谢

控制器类

 public ActionResult Index()
        {
            var allEntries = from entry in db.task
                             select entry;
            return View(allEntries.ToList());
        }

        [HttpPost]
        public ActionResult Index(String button)
        {
            if (button.Contains("Name"))
            {
            var allSortedEntries=db.task.OrderBy(person => person.Name);
            return View("Index",allSortedEntries.ToList());
            }
            else if (button.Contains("Age"))
            {
                var allSortedEntries = db.task.OrderBy(page => page.Age);
                return View("Index", allSortedEntries.ToList());
            }
               return View(); 

        }
        [HttpPost]
        public ActionResult EditRow(Task2 entry)
        {
            var updateentry = db.task.SingleOrDefault(pid => pid.id == entry.id);
            updateentry.id = entry.id;
            updateentry.Name = entry.Name;
            updateentry.Age = entry.Age;
            db.SaveChanges();
            return RedirectToAction("Index", entry);
        }

模型类

public class Task2
    {
        public int id { get; set; }
        public String Name { get; set; }
        public int Age { get; set; }
    }

查看

<!DOCTYPE html>
@model IList<Task2Sorting.Models.Task2>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js">
</script>
<script type="text/javascript"
    src="/Script/edit.js">
</script>
@{
    ViewBag.Title = "Name List";
    var grid = new WebGrid(source: Model,

               rowsPerPage: 10);

}
<h2>Index</h2>
@using (Html.BeginForm())
{

    <div id="grid">
        @grid.GetHtml(columns: new[]
{

    grid.Column(" ",format:@<text><div class="display-mode">
        <input type="hidden" id="idtxt" value="@item.id"/></div>
        <div class="edit-mode">
            <input type="hidden" id="idhidden" value="@item.id"/></div></text>,canSort:false),
    grid.Column("Name",format:@<text><div class="display-mode">@item.Name</div>
        <div class="edit-mode">
            <input type="text" id="nametxt" value="@item.Name" style="width:80px"/>
        </div></text>,canSort:false),
    grid.Column("Age",format:@<text><div class="display-mode">@item.Age</div>
        <div class="edit-mode">
            <input type="text" id="agetxt" value="@item.Age" style="width:80px"/>
        </div></text>,canSort:false),
    grid.Column("Action ",format:@<text>
        <button class="display-mode" name="editbtn">Edit</button>
        <button class="edit-mode" name="savebtn">Save</button>
        <button class="edit-mode" name="cancelbtn">Cancel</button>
        </text>,canSort:false),

})
    </div>
    <br />
    <div>
        @*<button id="sname" value="Name">Sort By Name</button>
        <button id="aname" value="Age">Sort By Age</button>*@
        <input type="submit" name="button" value="Sort By Name" id="sname"/>
        <input type="submit" name="button" value="Sort By Age" id="aname"/>
    </div>
}

JQuery 文件

$(function () {
    $('.edit-mode').hide();
    $('button[name=editbtn]').click(function () {
        var tr = $(this).parents('tr');
        tr.find('.edit-mode').toggle();
        tr.find('.display-mode').toggle();
    });

    $('button[name=savebtn]').click(function () {
        var tr = $(this).parents('tr');
        var Name = tr.find("#nametxt").val();
        var Age = tr.find("#agetxt").val();
        var Id = tr.find("#idhidden").val();
        tr.find("#name").text(Name);
        tr.find("#age").text(Age);
        tr.find('.edit-mode').toggle();
        tr.find('.display-mode').toggle();


        var Task2 =
        {
            "Id": Id,
            "Name": Name,
            "Age": Age
        };
        $.post("/Show/EditRow", Task2)
        {

        }
    });
    $('button[name=cancelbtn]').on('click', function () {
        var tr = $(this).parents('tr');
        tr.find('.edit-mode').toggle();
        tr.find('.display-mode').toggle();
    });
})

【问题讨论】:

    标签: jquery asp.net-mvc-4


    【解决方案1】:

    “编辑”按钮实际上是将您的表单提交到服务器。 试试return false;点赞

    $('button[name=editbtn]').click(function () {
        var tr = $(this).parents('tr');
        tr.find('.edit-mode').toggle();
        tr.find('.display-mode').toggle();
        return false;
    });
    

    您可能会在使用“保存”和“取消”时遇到同样的问题,也可以在那里尝试return false;。它将停止发布表单的默认浏览器行为。

    【讨论】:

    • 感谢您的回复,但我在这里有疑问,即使在为保存按钮指定 ActionResult 之后,它仍然会进入索引。因为我需要在单击保存按钮时提交表单,以便从我保存的数据库中获取更新的值。谁能澄清我对此的怀疑。
    • 您的保存功能使用 AJAX,这意味着数据库将在不刷新页面的情况下更新。即您不必点击索引来获取最新值,因为页面已经有最新的(由用户输入)。 PS如果我的回答可以帮助您解决原来的问题,请随时将我的回答标记为已接受
    • 我的数据库正在更新,但它没有显示在页面上我必须手动刷新页面才能看到更新的值。我什至尝试重定向到获取所有数据的 Index 操作,但我仍然一无所获。有什么办法可以帮我解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2019-07-22
    • 1970-01-01
    • 2012-07-09
    • 2021-12-16
    相关资源
    最近更新 更多