在页面重新加载时删除查询字符串

时间:2017-08-22 12:16:29

标签: javascript jquery asp.net-mvc

我有一个超链接,我正在重定向到一个页面。

$('.lnkMerging').on("click", function () {

            var id = $(this).attr('data-id');

            window.location = '/Merging/Index/?workItemID=' + id;
        });

我在控制器页面中的操作是

public ActionResult Index(int? workItemID)
        {
            MergingVM mergingVM = new MergingVM();
            mergingVM.SourceList = GetSourceDropdownList();
            mergingVM.WorkItem = (workItemID==null? 0: workItemID.Value) ;
            mergingVM.MergeActionSelectList = 
            GetMergeProcessActionDropdownList();
            PopulateDropDowns(mergingVM);
            return View(mergingVM);
        }

所以它的作用是当我点击超链接时,它会将我重定向到合并页面。 重定向到Merge页面后,下拉列表将填入id(在主页中选择)并相应地触发按钮点击。

我的问题当我重新加载合并页面时,下拉列表中的值不明确。即如果我已从主页重定向到合并页面,则下拉列表具有一些值。但是当我刷新它时,所选的值应该去。我知道查询字符串仍然保存该值。但是有没有替代方法可以在不使用jquery中的windows.location.href的情况下将参数发送到操作。

5 个答案:

答案 0 :(得分:0)

您可以将参数保存在html5的本地存储api中,然后在索引页的Page load中使用这些参数。

$('.lnkMerging').on("click", function () {

    var id = $(this).attr('data-id');
    localStorage.setItem("workItemID",id);

    window.location = '/Merging/Index/;
});

在索引的页面加载中,您可以使用getItem检索它 localStorage.getItem("workItemID");并根据您的要求使用它。

在合并页面的页面加载中,您必须如下所示显式设置所选选项,然后从本地存储中删除该值。

$(document).ready(function(){

if(localStorage.getItem("workItemID")!=null){
     $("#mydropdownlist").val(localStorage.getItem("workItemID"));
         localStorage.removeItem('workItemID');
    }
});

确保在var id = $(this).attr(' data-id'); id应该与合并页面上的选项中的值相同。

答案 1 :(得分:0)

为了清理查询字符串,您应该使用重定向到另一个视图。

    public ActionResult Index(int? workItemID)
    {
        MergingVM mergingVM = new MergingVM();
        mergingVM.SourceList = GetSourceDropdownList();
        mergingVM.WorkItem = (workItemID == null ? 0 : workItemID.Value);
        mergingVM.MergeActionSelectList =
        GetMergeProcessActionDropdownList();
        PopulateDropDowns(mergingVM);

        //to send this model to the redirected one.
        TempData["model"] = mergingVM;

         return RedirectToAction("CleanIndex");
    }

    public ActionResult CleanIndex()
    {
        var model = (MergingVM)TempData["model"] ?? new MergingVM();
       // Do something

        return View("Index", model);
    }

要找到方法的send参数的替代方法,首先需要了解模型Bindding操作。

模型出价搜索以下值:

  • 表单数据
  • 路线数据
  • 查询字符串
  • 文件
  • 自定义(例如Cookie)

如果你的行动必须是HttpGet,你就会丢失表格数据,这对你来说是一个不错的选择。

答案 2 :(得分:0)

我认为您应该使用POST,而不想要预先workItemID

我的意思是你有链接的所有地方你应该使用这样的想法:

<form action="/Merging/Index" method="POST">
    <input type="hidden" name="workItemID" value="1" /> <-- your Id
    <input type="submit" value="Link to workItemID 1!" /> <-- your link
</form>

这样您就可以获得自己的视图,但网址中没有workItemID。但是你应该改变css以使你的POST链接看起来像<a>标签。

以下是您的表格:

@if (@Model.DataSetList[i].StateID == 43)
{
    <td>
        <form action="/Merging/Index" method="POST">
            <input type="hidden" name="workItemID" value="@Model.DataSetList[i].Workitem_ID" />
            <input class="lnkMerging" type="submit" value="Merging" />
        </form>
    </td>
}
else
{
    <td>
        <text style="color:darkgrey" contenteditable="false">Merging</text>
    </td>
} 

答案 3 :(得分:0)

如果您正在使用超链接,那么您也可以尝试

$('.lnkMerging').on("click", function () {

        var id = $(this).attr('data-id');
        $(this).attr('href','/Merging/Index/?workItemID=' + id)
});

答案 4 :(得分:0)

如果我理解正确......下面的内容对我有用。

如果URL附加了ID,它将作为变量“param”记录到控制台。然后替换URL(这样,如果刷新页面,则会从URL中删除ID)。

$(document).ready(function() {

    var url = window.location.toString;
    var hostname = window.location.hostname;
    var pathname = window.location.pathname;
    var param = window.location.search;
    $('.lnkMerging').on("click", function () {

        var id = $(this).attr('data-id');         
        window.location = '/new-page.php?' + id;

    });
    if ( pathname == "/new-page.php" && param ) {
        console.log(param);
        window.history.pushState("string", "Title", "http://yourURL.com/new-page.php");
        //Do something with param...
    }
});

这假设如果URL没有附加ID,则下拉列表将不执行任何操作。您还需要将URL更新为正确的URL(我在本地服务器上运行)。