2017-06-14 25 views
0

我在很多地方視圖下多次的代碼塊:寫一個jQuery函數在asp.net mvc的觀點來代替重複的代碼

$.get('@Url.Action("ActionOne", "Home")', 
    { masterContractItemId: masterContractItemId }, 
    function(result) { 
     $('#addSubContractItemModal .modal-body').html(result);          
     $('#addSubContractItemModal').modal('show'); 
    }).done(function() { 
     $("#addSubContractItemModal .datepicker").datepicker(); 
     $('#addSubContractItemModal .chzn-select').chosen({ search_contains: true, width: '70px' });             
     createBootstrapSuccessMessage("Some text here", "#addSubContractItemModal #message"); 
}); 

這:

$.get('@Url.Action("ActionTwo", "Home")', 
     { contractItemId: contractItemId }, 
     function(result) { 
      $('#addContractItemModal .modal-body').html(result);          
      $('#addContractItemModal').modal('show'); 
     }).done(function() { 
      $("#addContractItemModal .datepicker").datepicker(); 
      $('#addContractItemModal .chzn-select').chosen({ search_contains: true, width: '70px' });             
      createBootstrapSuccessMessage("Some another text here", "#addContractItemModal #message"); 
    }); 

我想要做的是編寫一個函數,我將傳遞actionName,parameterName,parameterValue,modalName和messsageText來調用這些代碼行中的函數。

你能幫忙嗎?

ADD:我寫了下面的方法:

function RenderModalWindow(actionName, parameterName, parameterValue, modalId, messageText) { 
     var url = '/Area/Home/' + actionName + '?' + parameterName + '=' + parameterValue; 
     $.get(url,   
      function(result) { 
       $(modalId + ' .modal-body').html(result); 
       $(modalId).modal('show'); 
      }).done(function() { 
       $(modalId + " .datepicker").datepicker(); 
       $(modalId + ' .chzn-select').chosen({ search_contains: true, width: '70px' }); 
       createBootstrapSuccessMessage(messageText, modalId + " #message"); 
      }); 
    } 

然後我調用它的腳本:

RenderModalWindow("AddCategoryForContractItem", "masterContractItemId", masterContractItemId, "#addSubContractItemModal", "Text message here!"); 

但得到了一個錯誤: 本地主機/地區/主頁/ AddCategoryForContractItem? masterContractItemId = 19669 404(Not Found)

但是我有控制器中的目標方法:

public ActionResult AddCategoryForContractItem(int masterContractItemId) 
+0

我投票結束這個問題作爲題外話,因爲要求爲某個目的編寫代碼是脫離主題。爲此付出了一些努力。分享代碼。即使這是一個非常糟糕的代碼,沒有人會責怪你。但你的努力是非常重要的 –

+0

我編輯我的答案,因爲我試圖自己做 –

回答

1

我會做這樣(未測試的代碼):

const func1 = result => { 
 
    $('#addContractItemModal .modal-body').html(result);      
 
    $('#addContractItemModal').modal('show'); 
 
} 
 

 
const func2 = text => { 
 
    $("#addSubContractItemModal .datepicker").datepicker(); 
 
    $('#addSubContractItemModal .chzn-select').chosen({ search_contains: true, width: '70px' });  
 
    createBootstrapSuccessMessage(text, "#addSubContractItemModal #message"); 
 
} 
 

 
$.get('@Url.Action("ActionOne", "Home")', 
 
    { masterContractItemId: masterContractItemId }, 
 
    func1) 
 
\t .done(function() { func2("Some text here") }); 
 

 
$.get('@Url.Action("ActionTwo", "Home")', 
 
     { contractItemId: contractItemId }, 
 
     func1) 
 
\t .done(function() { func2("Some other text here") });

0

這個怎麼樣,

婁代碼將裏面的腳本。

var actionName = ""; 
var controllerName = ""; 
var parametersValue = ""; 
var messsageText = ""; 
var modalPopUp = ""; 
if(foo) //check here which one you want to load 
{ 
actionName = "myAction"; 
controllerName = "myController"; 
parametersValue = "myParameters"; 
messsageText = "myMessage"; 
modalPopUp = "myModalPopUp";  
myMethod(actionName,controllerName,parametersValue,messsageText,modalPopUp); 
} 
else 
{ 
actionName = "myAction"; 
controllerName = "myController"; 
parametersValue = "myParameters"; 
messsageText = "myMessage"; 
modalPopU = "myModalPopUp"; 
myMethod(actionName,controllerName,parametersValue,messsageText,modalPopUp); 
} 

function myMethod(actionName,controllerName,parametersValue,messsageText,modalPopUp) 
{ 
$.get('@Url.Action(actionName, controllerName)', 
     { 
     Id: parametersValue }, //See Here I changed the parameter name to Id 
     function(result) { 
     $('#addSubContractItemModal .modal-body').html(result);          
     $('#addSubContractItemModal').modal('show'); 
     }).done(function() { 
     $("#addSubContractItemModal .datepicker").datepicker(); 
     $('#addSubContractItemModal .chzn-select').chosen({ search_contains: 
     true, width: '70px' });             
    createBootstrapSuccessMessage(messsageText, "'#' + modalPopUp         
           #message"); 
     }); 
} 

你只需要定義一個函數一次並相應地調用它。

希望它有幫助:)