【问题标题】:Partial view is not working correctly in mvc4?局部视图在 mvc4 中无法正常工作?
【发布时间】:2016-03-08 13:43:55
【问题描述】:

您好,在我看来,我有一个称为联系人的字段。如果我单击该按钮,我会在该字段附近保留一个添加按钮,部分视图将显示为弹出窗口。

我的部分视图

如果我输入详细信息并单击保存按钮,则会出现保存数据的发布操作。现在我有两个问题。

1) CustomerName 的值将为空。

2) 在输入详细信息后单击弹出窗口中的创建按钮后,它要么必须显示相同的弹出窗口,要么必须显示父视图(访客表单),我在此步骤中遇到了问题。在这个地方它重定向到局部视图的主窗口。下图中提到了这一点。我尽力解释我的问题。请任何人帮我解决这个问题。

错误操作

Error Output

我的查看代码

 @Html.Label("Contact Person", new { @class = "control-label" })
 @Html.DropDownListFor(model => model.CustomerContactID, new SelectList(string.Empty, "Value", "Text"), "Please select a ContactPerson", new { @class = "form-control", type = "text", id = "CustomerContactID" })
  <button id="AddContactPerson">Add ContactPerson</button>
  <div id="AddNewContactPerson"></div>

我的 j-query 写在父视图中

    $(function () {
      $('#AddNewContactPerson').dialog({
      autoOpen: false,
      width: 400,
      height:500,
      resizable: false,
      title: 'Add New',
      modal: true,
      open: function(event, ui) {
      $(this).load("@Url.Action("ContactPersonPartialView", "VisitorsForm")");
        },
        buttons: {
            "Close": function () {
                $(this).dialog("close");
            }
        }
    });

   $("#AddContactPerson").click(function () {
    $("#AddNewContactPerson").dialog("open");
    });
  });

控制器代码

 public ActionResult ContactPersonPartialView()
  {
      ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "DisplayName");
      return View("ContactPersonPartialView");
  }
  [HttpPost]

  public JsonResult ContactPersonCreate(VisitorsViewModel VVviewmodel)
  {
      ViewBag.CustomerID = new SelectList(db.Customers, "CustomerID", "DisplayName", VVviewmodel.CustomerID);
      var ContactIDObj = Guid.NewGuid();
      var CustomerContactIDObj = Guid.NewGuid();

      var CustomerContactObj = new CustomerContact()
      {
          CustomerContactID = CustomerContactIDObj,
          CustomerID = VVviewmodel.CustomerID,
          ContactReference = VVviewmodel.ContactPerson,
          ContactID = ContactIDObj,
          IsActive = true,
          IsDeleted = false,
          CreatedDate = DateTime.Now,
          EditedDate = DateTime.Now,
          LastActiveOn = DateTime.Now,
          RowID = Guid.NewGuid(),
          CreatedSessionID = Guid.NewGuid(),
          EditedSessionID = Guid.NewGuid(),
          OfflineMode = false,
          OfflineID = Guid.NewGuid()
      };
      var ContactObj = new Contact()
      {
          ContactID = ContactIDObj,
          DisplayName = VVviewmodel.CustomerID.ToString(),
          PrintName = VVviewmodel.CustomerID.ToString(),
          Phone1 = VVviewmodel.PhoneNo,
          Mobile1 = VVviewmodel.MobileNo,
          Email1 = VVviewmodel.Email,
          Email2 = VVviewmodel.AlternateEmail

      };

      db.Contacts.Add(ContactObj);
      db.CustomerContacts.Add(CustomerContactObj);
      db.SaveChanges();
      ModelState.Clear();

      //return Json(new
      //{
      //    redirectUrl = Url.Action("create", "VisitorsForm"),
      //    isRedirect = true
      //});
      return Json("VisitorsForm", JsonRequestBehavior.AllowGet);
  }

我不知道如何重定向到相同的弹出窗口部分视图或父视图,请任何人更正我的重定向控制器代码。

我的部分查看代码

  <div id="AddNewContactPerson">

    @Html.Label("Customer Name")
    @Html.DropDownList("CustomerID", "Select")

    @Html.LabelFor(model => model.ContactPerson)
    @Html.EditorFor(model => model.ContactPerson)
    @Html.ValidationMessageFor(model => model.ContactPerson)

    @Html.LabelFor(model => model.Email)
    @Html.EditorFor(model => model.Email)
    @Html.ValidationMessageFor(model => model.Email)

    @Html.LabelFor(model => model.AlternateEmail)
    @Html.EditorFor(model => model.AlternateEmail)
    @Html.ValidationMessageFor(model => model.AlternateEmail)

    @Html.LabelFor(model => model.PhoneNo)
    @Html.EditorFor(model => model.PhoneNo)
    @Html.ValidationMessageFor(model => model.PhoneNo)

    @Html.LabelFor(model => model.MobileNo)
    @Html.EditorFor(model => model.MobileNo)
    @Html.ValidationMessageFor(model => model.MobileNo)

    <p>
        <input type="submit" value="Create" onclick="SaveContact()" />
    </p>

   </div>
   </form>

  </fieldset>
  }

  <div>
  @Html.ActionLink("Back to List", "Index")
  </div>
  <script src="~/Scripts/jquery-1.10.4-ui.min.js"></script>
  <link href="~/Content/jquery-ui-1.10.4.custom.min.css" rel="stylesheet" />
  <script src="~/Scripts/jquery-ui-1.8.24.min.js"></script>

  <script type="text/javascript">
   function SaveContact() {
    var CustomerName = $("#CustomerID").val();
    var ContactPerson = $("#ContactPerson").val();
    var Email = $("#Email").val();
    var AlternateEmail = $("#AlternateEmail").val();
    var PhoneNo = $("#PhoneNo").val();
    var MobileNo = $("#MobileNo").val();
    var CustomerContact = {
        "ContactPerson": ContactPerson, "Email": Email,
        "AlternateEmail": AlternateEmail, "PhoneNo": PhoneNo,
        "MobileNo": MobileNo, "CustomerID": CustomerName
    };

    $.post("/VisitorsForm/ContactPersonCreate", CustomerContact,
    function (data) { if (data == 0) { location = location.href; } }, 'json');
}
</script>

我在这里发布了我的整个代码,请任何人检查我的代码。在部分视图中,当我单击创建按钮并且它没有正确重定向时,客户名称将为空。我尽力解释我的问题。请任何人为这个问题提供解决方案。

提前谢谢..

【问题讨论】:

  • 首先删除 type="submit"。您没有提交表单。您正在单击按钮时调用 savecontact 函数。

标签: c# jquery ajax twitter-bootstrap asp.net-mvc-4


【解决方案1】:

对于您问题的第一部分:

CustomerName 可能为空,因为您的局部没有该名称的输入。你只有@Html.DropDownList("CustomerID", "Select"),它只会传入你的CustomerID,而不是CustomerName。但我不认为这是一个大问题,我想无论如何你都会将 ID 存储在数据库中。

如果您需要该名称,您可以简单地根据 CustomerID 值从数据库中获取它。

第二部分对我来说并不完全清楚,应该是什么条件使两个窗口之间显示不同?

【讨论】:

  • Csaba 我的第二个问题是如果我输入详细信息并单击创建按钮以将详细信息保存在数据库中。如果我单击创建按钮,它必须留在(显示)部分视图弹出窗口中.如果我单击弹出窗口中的关闭按钮,它将关闭弹出窗口,或者在单击弹出窗口中的创建按钮后必须重定向到父视图(主视图-访客表单)。
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
相关资源
最近更新 更多