区域3是控件UserControlInfos.ascx,现在想通过捕获点击区域1中的按钮"button0"激发JS函数selcontrol(obj),提交到controllers进行数据库查询,然后将查询结果返回到UserControlInfos.ascx控件。现在的问题是在controllers中已经查询到了数据,并返回了结果,但是区域3的控件UserControlInfos.ascx显示的内容依然没有改变,请问如何将新查询返回的数据显示到区域3。view层处理选中消息的JS代码:
<script type="text/javascript">
function selcontrol(obj) {//选中控件    $.get(
        "/home/index/", {
            str: obj.id
        },
        function(data,state){
            //这里显示从服务器返回的数据
            alert(data);
            //这里显示返回的状态
            alert(state);
        }
    )
}
</script>controllers层相应响应代码:
        UIDesignerRepository UIDRes = new UIDesignerRepository();
        public ActionResult Index(string str = null)
        {
            IQueryable<UIInfo> info = null;
            if (!string.IsNullOrEmpty(str))
            {
                info = UIDRes.FindUIsByText(str);    //根据字符串查询数据库操作
            }
            if (Request.IsAjaxRequest())
            {
                return PartialView("UserControlInfos", info);
            }
            return View(info);
        }UserControlInfos.ascx代码<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<UIDesigner.Models.UIInfo>" %>
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script><% if (Model != null){%>
    <fieldset id="fdProp">
        <legend>属性</legend>
        
        <div class="display-label"><strong>UID:</strong>  <%: Model.UID %></div>
        <div class="display-field"></div>
        
        <div class="display-label"><strong>value:</strong>  <%: Model.value %></div>
        <div class="display-field"></div>
        
        <div class="display-label"><strong>pixelleft:</strong>  <%: Model.pixelleft %></div>
        <div class="display-field"></div>
        
        <div class="display-label"><strong>pixeltop:</strong>  <%: Model.pixeltop %></div>
        <div class="display-field"></div>        <div class="display-label"><strong>disabled:</strong>  <%: Model.disabled %></div>
        <div class="display-field"></div>
        
        <div class="display-label"><strong>EventDate:</strong>  <%: String.Format("{0:g}", Model.EventDate) %></div>
        <div class="display-field"></div>
    </fieldset>
<%} %>
最好有示例代码,谢谢,100分奉上!

解决方案 »

  1.   

    貌似用户控件在ajax返回数据之前已经完成了绑定,所以数据不显示。
      

  2.   

    最终用户控件也会解析成html,那么你得到数据后,直接利用js找到对应位置,经取到的值传过去即可,其实无需用户控件,利用ajax取值后,直接改变对应位置即可
      

  3.   

    $("#button0").bind("click", function (e) {
        e.preventDefault();    $.get('/home/index/', { str: obj.id }, function (data, status) {
            $("#controlarea3").html(data);
        }, "html");
    });
      

  4.   


    请问这段JS代码放哪里?放index.aspx里的话激发不了$("#controlarea3").html(data);因为controllers里是返回到ascx,而不是aspx里, return PartialView("UserControlInfos", info);,具体请参看controllers代码
      

  5.   


    请问什么属性可以用于存储数据库查询的值,重新给这个属性赋值就可以立即在页面上显示出结果吗?我目前也已经通过return PartialView("UserControlInfos", info);给控件赋值了,问题是值变了,页面显示的内容还是没变化啊。
      

  6.   


    是的,因为页面打开的时候就要对控件数据进行初始化,并显示出来。那可不可以在用户控件中声明那几个html的客户端id,当ajax返回数据后,用js手动进行绑定。