SharePoint 2010 Modal Dialog Tweet
 
Modal dialog play very important role to improve the user experience by reducing the number of postbacks. So, SharePoint 2010 comes up with in-build API to show modal dialog to improve the user experience. Here, I will explain you How to integrate SharePoint 2010 modal dialog with the application and some real time problems and their solutions. Before I go on and provide you with the details, Let us see some of the features that this new Modal Dialog provides.

Functionality provided by Modal Dialog: -
       - Display HTML content  in Modal Dialog
       - Display external url (e.g. http://www.google.com) or any application page of SharePoint in the form of an iframe
       - Show/Hide Close button
       - Show/Hide Maximize button

Mentioned below are the steps to integrate a modal dialog in the SharePoint 2010:

  1. The JavaScript files for the ECMAScript Object Model (SP.js, SP.Core.js, SP.Ribbon.js, and SP.Runtime.js ) are installed in the %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS directory. We need to add these JavaScript files in the page.
  2. To open a dialog we need to use the 'SP.UI.ModalDialog.showModalDialog' method from the ECMAScript Client Object model and we can pass following parameters as per requirement:

- width: Set the width of the modal dialog

- height: Set the height of the modal dialog

- html: the ID HTML control or HTML content to be displayed in modal dialog

- url: Page url or relative path

- dialogReturnValueCallback: In case we want some code to run after the dialog is closed, set JavaScript method name

- allowMaximize: Set to true or false to show hide this option.

- showClose: Set to true or false to show or hide the close button

Examples:
a. Sample code to show HTML content in the SharePoint 2010 modal dialog:

HTML code

// Modal Dialog HTML content

<div id="divModalDialogContent">

Hello World!

<input type="button" value="OK"onclick="SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK, 'Ok clicked'); return false;"

class="ms-ButtonHeightWidth" />

<input type="button" value="Cancel"onclick="SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.cancel, 'Cancel clicked'); return false;"

class="ms-ButtonHeightWidth" />

</div>

JavaScript Code

<script type="text/javascript">

// Call openDialog method on button click or on page load

function openDialog() {

var options = {

html: divModalDialogContent,  // ID of the HTML tag

// or HTML content to be displayed in modal dialog

width: 600,

height: 300,

title: "My First Modal Dialog",

dialogReturnValueCallback: dialogCallbackMethod,  // custom callback function

allowMaximize: true,

showClose: true

};

SP.UI.ModalDialog.showModalDialog(options);

}

//Results displayed if 'OK' or 'Cancel' button is clicked if the html content has 'OK' and 'Cancel' buttons

function onDialogClose(dialogResult, returnValue) {

if (dialogResult == SP.UI.DialogResult.OK) {

alert('Ok!');

}

if (dialogResult == SP.UI.DialogResult.cancel) {

alert('Cancel');

}

}

// Custom callback function after the dialog is closed

function dialogCallbackMethod() {

alert('Callback method of modal dialog!');

}

</script>

b. Sample code to open a web page or application page in the modal dialog:

JavaScript code

<script type="text/javascript">

function openDialog() {

var options = {

url: "<Page Url>",

width: 600,

height: 300,

title: "My First Modal Dialog",

};

SP.UI.ModalDialog.showModalDialog(options);

}

</script>

Mentioned below are real time scenarios, you may encounter while using out of box modal dialog of SharePoint 2010 :-
1. Scenario: If page is too long and with the movement of vertical scrollbar, modal popup also move with the scrollbar. Ideally position of modal dialog should be fix.

Solution: Put mentioned below CSS class in you page:

.ms-dlgContent

{

position: fixed!important;

}

2. Scenario: Display modal popup on page load depending. Sometimes the page don't show modal dialog and a JavaScript error message comes (error: showModalDialog does not exist in SP.UI.ModalDialog).

Solution:  Use following code- ExecuteOrDelayUntilScriptLoaded(<showModelMethodName>, "sp.js");  
              This method be make sure that js method showModalDialog is not called till sp.js is fully loaded.

3. Scenario: Sometime we need to close popup from server side and also parent window refresh is required after saving modal dialog data in the SharePoint.

Solution: Mentioned below is the sample code to implement above requirement-

a.  Check current page is popup page or not

//Custom list or library form New, Edit or Display

if(SPContext.Current.IsPopUI)

{

// Code

}

OR

//Layout pages you can ensure byquery string

if(Request.QueryString["IsDlg"]=="1")

{

//code

}

b. To close popup use mentioned below JavaScript code:

<script type="text/javascript">

//Close popup on cancel button click

function CloseForm() {

window.frameElement.cancelPopUp();

return false;

}

//Commit/Refresh parent window on save button click

function SaveForm() {

window.frameElement.commitPopup();

return false;

}

</script>

c. use following server side code to close or save modal dialog:

//Put following code in the button click event, if update panel is not present in the page

ClientScript.RegisterClientScriptBlock(this.GetType(), Guid.NewGuid().ToString(),"CloseForm()", true);

OR

// Put following code in the button click event, if update panel is present in the page

ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), Guid.NewGuid().ToString(),"CloseForm()", true);

4. Scenario: After closing modal dialog, all controls disappear from the page.

Solution: If you assign HTML element id like we have done in our first example, you might encounter this issue, we should set copy of modal data instead of assigning ID. See sample code below:

<script type="text/javascript">

//Pass copy of HTML content instead of content control ID

function openDialog() {

var cloneModalContent = document.createElement('div');

cloneModalContent.innerHTML = document.getElementById('divModalDialogContent').innerHTML;

var options = {

html: cloneModalContent, //html content to be displayed in modal dialog

width: 600,

height: 300,

title: "My First Modal Dialog",

dialogReturnValueCallback: customOnDialogClose, //custom callback function

allowMaximize: true,

showClose: true

};

SP.UI.ModalDialog.showModalDialog(options);

}

</script>

Updated following real time scenario solution on 17 November, 2011:
 
a. To resolve position issue of modal dialog, we need to add "ms.ModelContent" css class. But correct CSS class name is "ms-dlgContent". Thank you "Athula Nidheesh" to rectify my mistake.

b. Sample code to save or close popup from server side.

c. After closing modal dialog, all controls disappear from the page.

SharePoint 2010 Modal Dialog的更多相关文章

  1. SharePoint 2010 Pop-Up Dialogs

    转:http://kyleschaeffer.com/sharepoint/sharepoint-2010-pop-up-dialogs/ SharePoint 2010 makes it incre ...

  2. Using SharePoint 2010 dialogs

    转:http://www.techbubbles.com/sharepoint/using-sharepoint-2010-dialogs/ SharePoint 2010 dialogs are J ...

  3. Upgrade from SharePoint 2010 to SharePoint 2016

    [转]http://nikcharlebois.com/upgrade-from-sharepoint-2010-to-sharepoint-2016/ In this blog, I will go ...

  4. SharePoint 2010 常用技巧及方法总结

    1.代码调试确定进程cd c:\windows\system32\inetsrvappcmd list wppause注:保存成批处理文件,查看进程.bat,用的时候双击即可 2.类似列表新建打开方式 ...

  5. 使用SharePoint 2010 母版页

    SharePoint 2010母版页所用的还是ASP.NET 2.0中的技术.通过该功能,实现了页面框架布局与实际内容的分离.虽然在本质上自定义母版页的过程和以前版本的SharePoint大致相同,但 ...

  6. Searching External Data in SharePoint 2010 Using Business Connectivity Services

    from:http://blogs.msdn.com/b/ericwhite/archive/2010/04/28/searching-external-data-in-sharepoint-2010 ...

  7. How to: Add SharePoint 2010 Search Web Parts to Web Part Gallery for Upgraded Site Collections

    When you upgrade to Microsoft SharePoint Server 2010, some of the new SharePoint Enterprise Search W ...

  8. Creating SharePoint 2010 Event Receivers in Visual Studio 2010

    转:http://msdn.microsoft.com/en-us/library/gg252010(v=office.14).aspx Summary:  Learn how to create a ...

  9. 使用SharePoint 2010的母版页

    转:http://tanyanbo2.blog.163.com/blog/static/97339159201111591458902/ SharePoint 2010母版页所用的还是ASP.NET ...

随机推荐

  1. UITableViewCell上面添加UIWebView

    首先创建一个webView对象和 private var webViewcell : UIWebView? 在viewDidLoad里面设置创建webViewcell,设置属性并用kvo监听webVi ...

  2. php app版本升级的思路

    用户端传递当前app的版本号,再根据机型和app_type ,查找数据库里的版本号 ,去比较 ... CREATE TABLE `common_versioninfo` ( `id` int(11) ...

  3. cuckoo数据库变更

    1.cuckoo版本升级 cuckoo默认的数据库为sqlite,默认连接方式为sqlite:///os.path.join(REPORT_ROOT, "db", "cu ...

  4. JS代码备忘

    function $(v) { if (typeof v === 'function') { window.onload = v; } else if (typeof v === 'string') ...

  5. 向网页中写入js和css

    向网页中写入js和css 本函数由前辈所写 loadFile: function (url, ftype) { var fileref; if (ftype == "js") { ...

  6. .parents() 与 .parent()对比

    今天使用jQuery时候需要用到parents()方法,css()方法的使用 现在只是知道可以取到父级DOM节点,研究是否可以通过选取class名或者id名进行选取. 取到父级DOM节点 $(e.sr ...

  7. Java 反射 Class对象

    Java 反射 Class对象 @author ixenos 关键字:RTTI.动态绑定.动态加载.获得Class引用.泛型Class引用.newInstance的坑.JVM中的泛型类型信息 RTTI ...

  8. git上传代码到github

    git上传代码到github [root@bigdata-hadoop- ~]# git init [root@bigdata-hadoop- ~]# git add zeppelin [root@b ...

  9. redhat 时区修改

    修改系统时区,发现只需要一个命令就可以解决 修改之前: cp /usr/share/zoneinfo/Asia/Chongqing  /etc/localtime 修改之后:

  10. NOIP2005-普及组复赛-第二题-校门外的树

    题目描述 Description 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...