2016-08-23 57 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')); 
});