2016-08-23 112 views
5

在由CSR(客戶端側渲染)重寫的SharePoint表單中。表單提交後重定向(CSR)

我試着添加一個新的按鈕,它與保存按鈕幾乎相同,只是它重定向到具有給定參數的另一個窗體。

事情是,重定向不起作用。 我試圖通過改變窗體的「動作」屬性來重定向,但它似乎沒有被計入。

下面是新按鈕: <input id="custom_addLine" type="button" name="custom_addLine" value="+" class="ms-ButtonHeightWidth">

這裏是以下由按鈕和addLine方法調用的函數:

$('#custom_addLine').click(function(event){ 
    event.preventDefault(); 
    addLine(getQueryStringParameter('ID')); 
}); 


function addLine(id) { 
    if(!PreSaveItem()) { 
     return false; 
    } 
    var actionUrl = "/Lists/PurchaseRequestLine/NewForm.aspx?PurchaseRequestID="+ id; 
    var encodedActionUrl = encodeURIComponent(actionUrl); 

    var newFormAction = location.pathname + '?Source=' + encodedActionUrl; 
    $('#aspnetForm').attr('action',newFormAction); 

    if(SPClientForms.ClientFormManager.SubmitClientForm('WPQ1')){ 
     return false; 
    } 
    WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('custom_addLine', "", true, "", "", false, true)); 
} 

getQueryStringParameter是定製的函數來檢索從URI參數(其作品)。

棘手的部分是我想保留默認動作URI,以防單擊原始的保存按鈕,這就是爲什麼動態參數在運行中被修改的原因。

回答

4

您可以從原來的動作直接改變Source屬性:

function addLine(id) { 
    if(!PreSaveItem()) { 
     return false; 
    } 

    var oldActionUrl = $('#aspnetForm').attr('action'); 
    var oldSource = GetUrlKeyValue("Source", true, oldActionUrl); 

    var newSource = "/Lists/PurchaseRequestLine/NewForm.aspx?PurchaseRequestID="+ id; 

    var newActionUrl = oldActionUrl.replace(oldSource, encodeURIComponent(newSource)); 

    WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions('custom_addLine', "", true, "", newActionUrl, false, true)); 
} 
+0

這是否仍然提交表單到相同的位置?我的意思是最初使用URI中給出的「Source」參數進行提交後SharePoint重定向有沒有其他方法可以重定向到Source參數指向的地方? – Hybris95

+0

最初的Source參數是否存儲在原始的表單動作中?當您恢復原始操作時,下一次提交將會導致相同(取決於輸入值) – aprovent

+0

我不確定要理解問題。改變表單行爲是否有效?如果沒有,我的迴應可以幫助你,否則它是你的源屬性,不工作? – aprovent

2

刪除event.preventDefault();從您的代碼,它是負責重定向不起作用

$('#custom_addLine').click(function(event){  
addLine(getQueryStringParameter('ID')); 
});