Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何在ASP.NET MVC应用程序中使用Razor语法使Telerik自动完成框正常工作_Asp.net Mvc 3_Razor_Telerik - Fatal编程技术网

Asp.net mvc 3 如何在ASP.NET MVC应用程序中使用Razor语法使Telerik自动完成框正常工作

Asp.net mvc 3 如何在ASP.NET MVC应用程序中使用Razor语法使Telerik自动完成框正常工作,asp.net-mvc-3,razor,telerik,Asp.net Mvc 3,Razor,Telerik,我试图从数据库表中的特定列获取数据,以使用ASP.NET MVC3中的Razor模板语法填充Telerik AutoComplete框。以下是我的html代码: @using Telerik.Web.Mvc.UI @model IEnumerable<COOLTool.Models.Agency> @{ ViewBag.Title = "Index"; } <h2 id="searchHeading2">Search</h2> <br/>

我试图从数据库表中的特定列获取数据,以使用ASP.NET MVC3中的Razor模板语法填充Telerik AutoComplete框。以下是我的html代码:

@using Telerik.Web.Mvc.UI
@model IEnumerable<COOLTool.Models.Agency>

@{
   ViewBag.Title = "Index";
}

<h2 id="searchHeading2">Search</h2>
<br/>
@(Html.Telerik().AutoComplete()
   .BindTo(IEnumerable < COOLTool.Models.Agency > ViewData["CA_AgencyName"])
   .Render();       

)
{ 使用制度; 使用System.Collections.Generic

public partial class Agency
{
    public int CA_AgencyID { get; set; }
    public string CA_AgencyName { get; set; }
    public string CA_AgencyAcronym { get; set; }
    public string CA_AgencyAcronym_SOLID { get; set; }
    public string CA_AgencyHomePageURL { get; set; }
    public string CA_AgencyContact { get; set; }
    public string CA_AgencyCredentialType { get; set; }
    public string CA_AgencyStreetAddress1 { get; set; }
    public string CA_AgencyStreetAddress2 { get; set; }
    public string CA_AgencyCity { get; set; }
    public string CA_AgencyState { get; set; }
    public string CA_AgencyZip { get; set; }
    public string CA_AgencyCountry { get; set; }
    public string CA_AgencyPhonePrimary { get; set; }
    public Nullable<int> CA_AgencyPhonePrimaryExtension { get; set; }
    public string CA_AgencyPhoneSecondary { get; set; }
    public string CA_AgencyFax { get; set; }
    public System.DateTime CA_AgencyRecordAddedDate { get; set; }
    public string CA_AgencyRecordAddedUserID { get; set; }
    public System.DateTime CA_AgencyRecordUpdatedDate { get; set; }
    public string CA_AgencyRecordUpdatedUserID { get; set; }
    public int CA_AgencyStatus { get; set; }
    public bool CA_Active { get; set; }
    }
}

我可以给你Jquery自动完成的代码
工作代码。如果需要,请回复我

这是将调用控制器的Jquery方法。它将获取搜索的前三个字符,并将其发送到控制器的参数

  $(document).ready(function () {
            $("#AutoComplete").keypress(function () {
                var title = $("#AutoComplete").val();
                var availableTags = [];
                if (title.length == 3) {
                    $.get("/Wk/GetTitle/" + title, function (data) {
                        var arr = jQuery.makeArray(data.split(','));
                        for (var i = 0; i < arr.length; i++) {
                            availableTags.push(arr[i]);
                        }
                        $("#AutoComplete").autocomplete({
                            source: availableTags
                        });
//                        $("#AutoComplete").select();
                    });

                }
            });
        });
这是控制器代码

 [HttpGet]
    public StringBuilder GetTitle(string inputString)
    {
        StringBuilder sb = new StringBuilder();
        List<string> title = new List<string>();
        int i = 0;
        string slug = RouteData.Values.Values.ElementAt(2).ToString();
        title = pageBL.GetTitleAutocomplete(slug);

        for (i = 0; i <= title.Count - 1; i++)
        {
            if (i != title.Count -1 )
                sb = sb.Append(title.ElementAt(i) + ",");
            else
                sb = sb.Append(title.ElementAt(i) );
        }
        return sb;
    }
此控制器获取参数并在字符串生成器中返回所需的输出。 格式为Ex:印度、印第安纳、印度尼西亚。。。 Jquery获取op并显示在搜索框中 这里的“自动完成”是完成搜索的文本框


如果您有任何问题,请告诉我

我不确定您的问题到底是什么,但从您最可能遇到的问题来看,这是由于多种原因造成的

首先,应该注意,自动完成组件需要绑定到自定义对象的IEnumerable,而不是IEnumerable,如中所述。这意味着:.BindToIEnumerableViewData[CA_AgencyName]必须更改为:.BindToIEnumerableViewData[CA_AgencyName]

现在,您需要做的是确保在关键CA_AgencyName下在ViewData中实际保存了一些内容。如果没有,这将再次解释您遇到问题的原因。例如,我为名为Index的视图提供了以下ActionResult:

public ActionResult Index()
{
    List<Agency> myList = new List<Agency>();
    myList.Add(new Agency() { CA_AgencyName = "Name 1" });
    myList.Add(new Agency() { CA_AgencyName = "Name 2" });
    myList.Add(new Agency() { CA_AgencyName = "Different" });

    List<String> listToBind = new List<String>();

    foreach (var item in myList)
    {
        listToBind.Add(item.CA_AgencyName);
    }

    ViewData["CA_AgencyName"] = listToBind;

    return View();
}
当然,这只是虚拟数据,但它给出了总体思路。在我看来,我刚刚做了以下工作:

@(Html.Telerik().AutoComplete().Name("Test").BindTo((IEnumerable<String>)ViewData["CA_AgencyName"]))
请注意,由于我使用@…,所以没有显式调用.Render;因为这只应在使用@{…}时使用

所有这些都为您提供了一个在页面上工作的Telerik自动完成组件

@(Html.Telerik().AutoComplete().Name("Test").BindTo((IEnumerable<String>)ViewData["CA_AgencyName"]))