我有一个超链接,我正在重定向到一个页面。
$('.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的情况下将参数发送到操作。
答案 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操作。
模型出价搜索以下值:
如果你的行动必须是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(我在本地服务器上运行)。