【问题标题】:MVC5 Ajax.BeginForm, UpdateTargetId no render PartialViewMVC 5 Ajax.BeginForm,UpdateTargetId 不呈现部分视图
【发布时间】:2017-01-28 19:20:27
【问题描述】:

我的 MVC 应用程序有问题。

我的控制器:

  public class CustomerController : Controller
{
    CustomerFacade cf = new CustomerFacade();

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

    [HttpPost]
    public void Create(Customers customers)
    {
        if (customers != null)
        {
            cf.CreateCustomer(customers, UserSession.UserId);
        }

        // return View();
    }


    public ActionResult GetAllCustomers()
    {
        var allCustomers = cf.GetAllCustomers();
        return PartialView("InsuranceCustomer", allCustomers);
    }
}

我的主要观点:

 <div class="x_content">

        <div id="mainb" style="height:350px;">

            <button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-lg">
                <i class="fa fa-plus"></i>
            </button>
            @*render modal*@
            @Html.Partial("~/Views/Customer/CreateModal.cshtml")

            <button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-lg">
                <i class="fa fa-database"></i>
            </button>
            @*render modal*@

            <div id="customerId">
                @Html.Action("GetAllCustomers", "Customer")
            </div>

        </div>
    </div>

部分视图 CreateModal.cshtml 是引导模式弹出窗口上的一个表单:

例如:

    <div class="modal-body">
            @using (Ajax.BeginForm("Create", "Customer", null, new AjaxOptions
            {
                HttpMethod = "Post",
                UpdateTargetId = "customerId",
                OnSuccess = "$('#customerModal').modal('hide')"
            }))
            {
                @Html.AntiForgeryToken()
                <div class="form-horizontal">
                    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                    <div class="form-group">
                        <div class="col-md-4">
                            @Html.TextBoxFor(model => model.FirstName, new { @required = "require", @class = "form-control", placeholder = @Resources.InsuranceCustomer.FirstName })
                            @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
                        </div>
                        <div class="col-md-4">
                            @Html.TextBoxFor(model => model.LastName, new { @required = "require", @class = "form-control", placeholder = @Resources.InsuranceCustomer.LastName })
                            @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
                        </div>
                    </div>

                    // and other field form

                <div class="modal-footer">
                    <button type="submit" class="btn btn-default" data-dismiss="modal">Close</button>
                    <input type="submit" value="@Resources.Common.Save" class="btn btn-success" />
                </div>
            }
            @*<div>
                    @Html.ActionLink("Back to List", "Index")
                </div>*@
        </div>

InsuranceCustomer 看起来像:

@model IEnumerable<Insurance_System.Models.Customers>

  <p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>

    <th>
        @Html.DisplayNameFor(model => model.FirstName)
    </th>  
</tr>
@foreach (var item in Model) {
<tr>    
    <td>
        @Html.DisplayFor(modelItem => item.FirstName)
    </td>
</tr>}   

我想在提交模态 CreateModal 后再次加载 InsuranceCustomer 并使用新元素而不重新加载页面。

(对不起我的英语不好)

【问题讨论】:

  • 什么问题?你甚至没有解释实际发生的事情。你有没有包含相关的脚本(jquery.unobtrusive-ajax.js)

标签: ajax asp.net-mvc twitter-bootstrap


【解决方案1】:

在控制器中

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

    [HttpPost]
    public void Create(Customers customers)
    {
        var cust = new customer
        {
         name=customers.name,
         etc....
        }
        db.customers.add(cust);
        db.savechanges();
        var listcustomers  = db.customers.ToList();
        return PartialView("InsuranceCustomer",listcustomers);
    }

在视图中

<div class="x_content">

        <div id="mainb" style="height:350px;">
           <div id="customerId">
                      @*here will be load your partialview*@
            </div>
        </div>
    </div>
<div class="modal-body">
        @using (Ajax.BeginForm("Create", "Customer", null, new AjaxOptions
        {
            HttpMethod = "Post",
            UpdateTargetId = "customerId",
            OnSuccess = "$('#customerModal').modal('hide')"
        }))
        {
            @Html.AntiForgeryToken()
            <div class="form-horizontal">
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                <div class="form-group">
                    <div class="col-md-4">
                        @Html.TextBoxFor(model => model.FirstName, new { @required = "require", @class = "form-control", placeholder = @Resources.InsuranceCustomer.FirstName })
                        @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
                    </div>
                    <div class="col-md-4">
                        @Html.TextBoxFor(model => model.LastName, new { @required = "require", @class = "form-control", placeholder = @Resources.InsuranceCustomer.LastName })
                        @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
                    </div>
                </div>

                // and other field form

            <div class="modal-footer">
                <button type="submit" class="btn btn-default" data-dismiss="modal">Close</button>
                <input type="submit" value="@Resources.Common.Save" class="btn btn-success" />
            </div>
        }
        @*<div>
                @Html.ActionLink("Back to List", "Index")
            </div>*@
    </div>

在局部视图中

@model IEnumerable<Insurance_System.Models.Customers>

  <p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>

    <th>
        @Html.DisplayNameFor(model => model.FirstName)
    </th>  
</tr>
@foreach (var item in Model) {
<tr>    
    <td>
        @Html.DisplayFor(modelItem => item.FirstName)
    </td>
</tr>} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-13
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多