首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC 5 Ajax问题

MVC 5 Ajax问题
EN

Stack Overflow用户
提问于 2014-01-30 08:15:48
回答 2查看 1.2K关注 0票数 1

我正在学习MVC5,我正在尝试实现一个简单的页面来添加和显示学生。这个问题需要很大的篇幅,但却是极其基本的。

下面是模型:

代码语言:javascript
复制
public class Student
{
    public int StudentId { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

以下是行动方法:

代码语言:javascript
复制
public ActionResult Index()
    {
        return View(db.Students.ToList());
    }

    public ActionResult Create()
    {
        return PartialView();
    }


    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Student student)
    {
        if (ModelState.IsValid)
        {
            db.Students.Add(student);
            db.SaveChanges();
            return PartialView();
        }

        return PartialView(student);
    }

下面是父视图:Index.cshtml

代码语言:javascript
复制
@model IEnumerable<MVCAjax.Models.Student>
<h2>Index</h2>
<div class="row" id="myformbase">
    <div class="col-md-6">
        <table class="table">
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.Name)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Age)
                </th>
                <th></th>
            </tr>

            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.Name)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Age)
                    </td>
                </tr>
            }

        </table>
    </div>
    <div class="col-md-6">
        @Html.Action("Create")
    </div>
</div>

以下是子视图:Create.cshtml

代码语言:javascript
复制
@model MVCAjax.Models.Student
@using (Ajax.BeginForm("Create", "Student", new AjaxOptions { UpdateTargetId = "myform" }))
{
    <div id="myform">
        <h2>Create</h2>
        @Html.AntiForgeryToken()

        <div class="form-horizontal">
            <h4>Student</h4>
            <hr />
            @Html.ValidationSummary(true)
            <div class="form-group">
                @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Name)
                    @Html.ValidationMessageFor(model => model.Name)
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.Age, new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Age)
                    @Html.ValidationMessageFor(model => model.Age)
                </div>
            </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>

        </div>
    </div>
}

现在我几乎没有什么问题:

  1. 当我键入学生姓名和年龄并单击“创建”时,文本框仍然显示值,而不是清除。数据保存在数据库中。
  2. 如果我想更新列表的左边部分,一旦新的学生被添加。

我对MVC4有一点经验,如果我过去传递(在AjaxOptions中)包含两个子div的div Id (在我的例子中是"myformbase"),那么它就会更新它。但不确定为什么这在MVC5中不起作用。

EN

Stack Overflow用户

发布于 2014-01-30 08:28:56

当我键入学生姓名和年龄并单击“创建”时,文本框仍然显示值,而不是清除。数据保存在数据库中。

解决这个问题的正确方法是做一个重定向(PRG)。或者,您可以创建一个空模型并将其绑定到视图(我指的是Student s = new Student(); return PartialView(s);)。

如果我想更新列表的左边部分,一旦新的学生被添加。

PRG也能解决你的问题。因此,一旦完成创建,就重定向到Index。或者,您可以使用AJAX到Index并在视图中加载html。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21451004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档