首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC RedirectToAction未在视图中呈现更新的html

问MVC RedirectToAction未在视图中呈现更新的html
EN

Stack Overflow用户
提问于 2010-10-23 00:45:24
回答 2查看 2.5K关注 0票数 1

这是一个概述;我有一个带有数据表的视图,在更改过滤器选项(复选框)时,我调用一个过滤器操作,做一些工作,然后redirecttoAction到接受我的过滤器信息的主操作。在调试过程中,我可以看到通过操作传递的预期数据,甚至是在构建html的View上传递的数据,但是预期的行数或多或少的html不会呈现-它与默认的过滤列表保持相同。

以下是部分代码。

带有复选框的HTML:

代码语言:javascript
复制
<fieldset>
<legend style="color: #27568e;">Filter</legend>
    <table id="Filter">
        <thead>
        </thead>
        <tbody>
            <tr>
                <td>
                <input type="checkbox"  value="14" name="filterList" checked="checked"/>Type1
                <input type="checkbox"  value="15"name="filterList" checked="checked"/>Type2
                <input type="checkbox"  value="16" name="filterList" />Type3
                <input type="checkbox"  value="17"  name="filterList" />Type4
                <input type="button" value="Filter" id="Filterbutton" onclick="getFilterList('<%= Model.myId %>','filterList');" />
                </td>
            </tr>
        </tbody>
    </table>
 </fieldset>

Javascript/JQuery

代码语言:javascript
复制
<script type="text/javascript">

function getFilterList(id, checklist) 
   {
       var data = {};
       var resultString = new String;
       var selected = new Array();
       var loopCounter = 0;
       jQuery("input[name=" + checklist + "]:checked").each(function () {
           //selected[loopCounter] = jQuery(this).val();
           resultString += jQuery(this).val() + ",";
           loopCounter += 1;
       });
       resultString = resultString + id.toString();
       selected.push(id);

       jQuery.post("/MyContr/Filter/", { resultStr: resultString });

   };
</script>

控制器中的过滤操作- MyContr:

代码语言:javascript
复制
[AcceptVerbs(HttpVerbs.Post)]
    public RedirectToRouteResult Filter(String resultStr)
    {
        string strList = string.Empty;
        Stack<string> myStack = new Stack<string>( resultStr.Split(new string[] { "," }, StringSplitOptions.None));
        // Remove the id 
        var id = Convert.ToInt64(myStack.Pop());
       //convert rest of values (selected checkbox values) to string and pass to Review *was not able to pass array
       //build strList
        while (myStack.Count > 0)
        { 
            strList += myStack.Pop() +",";
        }

       if (strList != string.Empty)
           strList = strList.Remove(strList.Length - 1, 1); //remove last comma

        return RedirectToAction("Review", "myContr", new{id=id,filterList=strList});
    }

查看控制器中的操作- MyContr:

代码语言:javascript
复制
[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult Review(long id, string filterList)
    {

        string[] strArray = new string[]{}; 
        int[] filterArray;

        if (filterList == null)
        {
            filterArray = new int[] { 14, 15 };//default to specific types
        }
        else
        {  //if filterList is not null

            strArray = filterList.Split(new string[] { "," }, StringSplitOptions.None); //split string into array
            //convert str[] to int[]
            filterArray = new int[strArray.Length];
            for (int x = 0; x < strArray.Length; x++)
            {
                filterArray[x] = Convert.ToInt32(strArray[x].ToString());
            }

        }
        var myData = something.GetMyData(id);

        ViewData["checkboxes"] = filterArray;
        return View(myData);
    }

我的视图,在字段集中输出过滤的列表表格,其数据行是由foreach构建的(MyFilteredData中的项)

* my View中的html包含在asp:Content块中,没有开始和结束html标记

第一次正确加载页面时,默认的筛选器显示了表中正确的行数;更改复选框以添加到筛选列表中并不会按预期更新html;但是,当我调试和单步执行代码时,正确的数据会通过操作传递回视图;似乎只是没有呈现新的/更新的html。

有人知道为什么不刷新或呈现更新的过滤数据,即使我可以逐步查看我希望看到的吗?

EN

回答 2

Stack Overflow用户

发布于 2010-10-23 01:46:35

我不是jQuery专家,但是post方法不需要指定一个回调函数来将返回的html添加到DOM中的元素中吗?

来自jquery的页面:

代码语言:javascript
复制
$.post('ajax/test.html', function(data) {
  $('.result').html(data);
});

http://api.jquery.com/jQuery.post/

其中返回的html通过html方法附加到.result类的元素。

更多信息请参见jquery的页面:

示例:请求test.php页面,但忽略返回结果。

代码语言:javascript
复制
$.post("test.php");

示例:请求test.php页面并发送一些额外的数据(同时仍然忽略返回结果)。

代码语言:javascript
复制
$.post("test.php", { name: "John", time: "2pm" } );
票数 1
EN

Stack Overflow用户

发布于 2010-10-23 04:51:50

你的代码有两个问题。正如@Francis Noriega指出的那样,jquery中需要有一个回调函数来将返回的视图填充回页面中。

然而,更大的问题是:

代码语言:javascript
复制
return RedirectToAction("Review", "myContr", new{id=id,filterList=strList});

这将返回一个HTTP302(重定向)到您的jquery调用代码,而不是被调用操作的html内容。您将需要更改操作方法以返回部分视图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3999038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档