通过在 MVC4 中多次单击按钮打开弹出窗口的问题?

Posted

技术标签:

【中文标题】通过在 MVC4 中多次单击按钮打开弹出窗口的问题?【英文标题】:Issue in opening pop-up window by clicking button multiple times in MVC4? 【发布时间】:2016-07-27 19:06:23 【问题描述】:

您好,我在单击按钮时多次打开弹出窗口时遇到问题。我会清楚地解释我的问题。

嗨,这是我的父视图客户表单。如果我输入客户名称地址类型、街道、位置、地点,然后选择区域。假设如果区域不在列表中意味着我必须添加它。所以我点击那个添加按钮,它会打开 AreaPartial 视图作为弹出窗口。

在我输入详细信息并单击创建按钮后,它会将数据保存在 db 中,并且当它关闭时它会显示相同的弹出窗口,这意味着当我单击 x 标记时[位于弹出窗口右上角)。现在一切正常。

现在我的问题是我通过单击按钮打开弹出窗口并添加区域并在单击父视图中的主保存按钮之前关闭弹出窗口我必须添加另一个区域所以我单击添加再次按钮,但它不会打开弹出窗口。这是我的问题。

用于保存部分视图弹出窗口中输入的数据的我的控制器代码

  public ActionResult AreaPartialView()
  
    ViewBag.CityID = new SelectList(db.Cities, "CityID", "DisplayName");
    return View("AreaPartialView");
  
   [HttpPost]

  public ActionResult AddAreaInfo(CustomerViewModel objareaVM)
   
     var objAreaID = Guid.NewGuid();
     ViewBag.CityID = new SelectList(db.Cities, "CityID", "DisplayName", objareaVM.CityID);

     var ObjArea = new Area()
    
    AreaID =objAreaID,
    DisplayName = objareaVM.Area,
    PrintName = objareaVM.Area,
    CityID = objareaVM.CityID,
    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()
    ;

    db.Areas.Add(ObjArea);
    db.SaveChanges();
    ModelState.Clear();

  return Json(objAreaID);
   

在父视图中单击添加按钮后,我的 j-query 代码将区域部分视图显示为弹出窗口

  <script src="~/Scripts/jquery-1.10.2-ui.js"></script>
  <link rel="stylesheet"href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" />

  <script type="text/javascript">
   $("#AddArea").click(function () 
   $('#AddAreaNew').dialog("open");
   );
   $(function () 
   $('#AddAreaNew').dialog(
   autoOpen: false,
   width: 400,
   height: 500,
   resizable: false,
   title: 'Add Area',
   modal: true,
   open: function (event, ui) 
       $(this).load("@Url.Action("AreaPartialView", "Customer")");
   ,
   buttons: 
       "Close": function () 
           $(this).dialog("close");
       
    
    );
    );

我的部分查看代码

   @html.Label("Area" , new  @class = "control-label" )
   @Html.TextBoxFor(model => model.Area, new  @class = "form-control", type = "text" ,id ="AreaName")
   @Html.ValidationMessageFor(model => model.Area)

   @Html.Label("City")        
   @Html.DropDownList("CityID", null, "Select", new  @class = "form-control " )

 <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 SaveArea() 
  debugger;
  var Area = $("#AreaName").val();
  var CityID = $("#CityID").val();
  alert(Area);
  var AreaAdd =  "Area": '' +Area + '', "CityID": CityID ;
   $.post("/Customer/AddAreaInfo", AreaAdd, function(data)  
    var option = new Option(Area, data);
        $('#AreaID').append($(option));
        alert("sucess");
        window.close();
  );
  

这是我的问题,我无法多次打开弹出窗口。我已尽力解释我的问题。请任何人帮我解决这个问题。

提前谢谢..

【问题讨论】:

最好的办法可能是创建一个隐藏的 div 并为其创建一个类。然后一旦你有了它,只需显示或隐藏 div 而不是使用 jquery 的对话框样式。当您实际“关闭”对话框并一起删除部分视图时,可能会导致一些冲突。我还想看看使用 AJAX 将数据发布到您的控制器,因为您已经大量使用 JavaScript。如果你愿意,我可以给你举个例子。 是的,我需要一个例子 Dr_FeelGood 由于您使用 jquery 打开此对话框,因此您应该在 SaveArea() 方法中使用 $('#AddAreaNew').dialog('close') 而不是 window.close()。跨度> 好的,让我试试thangadurai 我按照你说的thangadurai给了,但它不起作用.. 【参考方案1】:

作为一个简短的例子,也许这样的事情会对你有所帮助。

<style>
.floatingbox

z-index:99999;
position:absolute;
/* and more of your styling here, the main point is to make to appear above any other element on the page */

</style>

<div class="floatingbox" id="inputbox">

</div>

编辑:<input type="button" value="Add Field" onclick="WhenIGetClicked(this)"/>

function WhenIGetClicked(e)

RefershContent();
document.getElementbyId('input').style.left = e.style.left;
document.getElementbyId('input').style.top = e.style.top; // show div at position of button but you can change it to where-ever


function RefreshContent()

 // put your html in here for the different fields you'll need in the div 
document.getElementbyId('inputbox').innerHTML = '';
// add the rest of your html mark up but make it as a function so it can be 'refreshed' and look like a new blank form each time, i found this easier than making a partial view and having to deal with loading it into the div/messing with javascript inside the partial view but may be personal preference :)


function OnSaveClick()

var SomeValueYouWantToPass = document.getElementbyId('inputboxinsidethediv').value; // or innerHTML works sometimes too if it's not getting the value correctly

$.ajax(
type:post,
url: '/MyController/ActionName',
dataType: 'json',
data:  MyVariableOnTheControllerSide: SomeValueYouWantToPass ,
success: function()

alert('hey it worked!'); // or refresh the page to load the new field, etc

)


</script>

现在在控制器端:

public JsonResult UpdateField(string MyVariableOnTheControllerSide)

//do something with the data. 
return Json('Hey it worked!', JsonRequestBehavior.AllowGet);

如果你想将它作为一个类传递,因为这是你在控制器上设置它的方式,你必须在获取值时在它的 HTML 标记端创建一个 Json 对象(哎呀,您甚至可以对 div 中的控件进行 for 循环并动态获取值,而不是伸手到每个元素来获取它的值)。我通常如何做弹出窗口的非常基本的运行。如果您需要澄清或者我错过了您的观点,请告诉我:)

【讨论】:

以上是关于通过在 MVC4 中多次单击按钮打开弹出窗口的问题?的主要内容,如果未能解决你的问题,请参考以下文章

尝试通过单击打开它的 div 中断按钮外部来关闭弹出窗口

弹出窗口在 Kendo UI 网格中的工作原理以及如何在 MVC4 的 Kendo UI ajax 网格中将控件带入弹出窗口

单击按钮时打开 WPF 弹出窗口

单击右上角的关闭(x)按钮后,DOJO 对话框未第二次打开

单击python kivy中的按钮后如何打开弹出窗口?

单击复选框并单击恢复按钮时如何打开Jquery对话框弹出窗口