2013-10-09 43 views
-1

我正在使用ajax调用命中数据库来加载下拉列表。现在,我们现在正在努力工作,现在有人想出了如何去做。使用ByRef通过ByVal命中数据库

我的主管要求我尝试让我的ajax调用一个我可以轻松用于多个页面的应用程序,而无需为每个新页面重做代码。我的代码:

控制器

Function Index(ByVal KovID As String) As JsonResult 
    Dim db As New Database1Entities 
    Dim record As New List(Of BodyStyle) 
    record = (From b In db.BodyStyles Where b.KovID = KovID Select b).ToList 
    Return Json(record, JsonRequestBehavior.AllowGet) 
End Function 

JQuery的

function ajaxSuccess(record) { 
    var drop2 = $('#Vehicle_BodyStyle_value'); 
    drop2.get(0).options.length = 0; 
    drop2.get(0).options[0] = new Option("Please Select One", "-1"); 
    $.each(record, function (index, item) { 
     drop2.get(0).options[drop2.get(0).options.length] = new Option(item.BodyStyle1, index); 
    }); 
} 

function ajaxError() { 
    $('#Vehicle_BodyStyle_value').get(0).options.length = 0; 
    $('#Vehicle_BodyStyle_value').get(0).options[0] = new Option("Error!", "-1"); 
    alert("Failed to load styles"); 
} 

$('#Vehicle_KovId_value').change(function() { 
    var kovID = $(this).val(); 
    var drop2 = $('#Vehicle_BodyStyle_value'); 
    if (kovID != null && kovID != '') { 
     drop2.get(0).options.length = 0; 
     drop2.get(0).options[0] = new Option('Please Select One', '-1'); 
     $.ajax({ 
      type: "GET", 
      url: '/Ajax/Index', 
      async: false, 
      data: { KovID: kovID }, 
      contentType: "application/json; charset=utf-8", 
      success: ajaxSuccess, 
      error: ajaxError 
     }); 
    } 
}); 

现在,我不知道VB.NET。事实上,一位同事帮助我与控制员,他不在这里协助进一步处理这件事。

我的上司提出的问题是我们如何做这项工作?

如果控制器类的ByVal变更为ByRef,我们可以通过在在Ajax调用的data:线的东西,使这个代码可以重复使用,没有被改写?

任何帮助或澄清将不胜感激。

+0

它可能有助于说明,我正在阅读有关'ByRef'和'ByVal'及其差异的事情,并且它不会为我点击。所以即使仅仅以我理解的方式解释这种差异就足以回答我的问题。 – Kendra

回答

3

当您通过ByVal时,您会传递一个副本的变量。当您通过ByRef(通过引用)时,您传递对象参考(简单地说,您传递确切的原始变量)。

Dim exampleVariable As String = "hello" 

MyMethodOne(exampleVariable) 'Call methodOne (We pass a COPY of exampleVariable) 


Private Sub MyMethodOne(ByVal x As String) 
     x = "Foo" 
     Console.WriteLine(x) 'prints Foo 
     Console.WriteLine(exampleVariable) 'prints hello 
End Sub 

MyMethodTwo(exampleVariable) 'Call method (we pass the REFERENCE to exampleVariable) 
Private Sub MyMethodTwo(ByRef x As String) 
     x = "Foo" 
     Console.WriteLine(x) 'prints Foo 
     Console.WriteLine(exampleVariable) 'prints Foo 
End Sub 
+0

这一切都开始对我有意义......所以,从我目前看到的情况来看,在我的控制器中将'ByVal'更改为'ByRef'将无法帮助我将ajax调用通用化,我是否正确? – Kendra

+0

你是对的。实际上,我们很少在VB.NET中使用ByRef(默认是ByVal,ByRef是为了兼容性)。我可以安全地从未在生产中使用过ByRef,但我可以看到它的用途。 – TEK

+0

我明白了...这让事情变得更加清晰。似乎我对他的原始答案是正确的。感谢您帮助我。 – Kendra

相关问题