Javascript 在MVC5的URL中传递变量
我正在编码MVC5和C 我有一个索引视图,它有一个由控制器填充的dropdownlist,其中有两个表字段File\u Desc&Track\u Nmbr。当用户从下拉列表中选择一个文件描述时,它会触发一个javascript重定向,并将该轨迹作为“关键字”传递给一个名为“列表”的视图。列表然后显示数据库中具有相同轨迹的所有项目\u Nmbr。这部分都按设计工作 我迷路的地方是下一步。在列表视图中,用户查看当前项目后,可以输入与此跟踪相关联的新项目\u Nmbr。因此,我希望创建视图打开并预填充Track\u Nmbr字段 我可以很容易地从“索引视图”下拉列表中获取曲目,并将其传递到列表视图。但是如何将其再次传递给Create视图呢?因为我再也无法从下拉列表中抓取它了 我一直在寻找和阅读,但时间是关键。我仍然会继续寻找信息,并尽我最大的努力解决它,但我是在砖墙。我对MVC5很陌生 我将分享我的所有代码,这样您就可以看到我到目前为止是如何设置的。我正在寻找打开“创建”视图并预填充田径场的最简单解决方案 代码:索引控制器Javascript 在MVC5的URL中传递变量,javascript,c#,asp.net-mvc-5,Javascript,C#,Asp.net Mvc 5,我正在编码MVC5和C 我有一个索引视图,它有一个由控制器填充的dropdownlist,其中有两个表字段File\u Desc&Track\u Nmbr。当用户从下拉列表中选择一个文件描述时,它会触发一个javascript重定向,并将该轨迹作为“关键字”传递给一个名为“列表”的视图。列表然后显示数据库中具有相同轨迹的所有项目\u Nmbr。这部分都按设计工作 我迷路的地方是下一步。在列表视图中,用户查看当前项目后,可以输入与此跟踪相关联的新项目\u Nmbr。因此,我希望创建视图打开并预填充
public ActionResult Index()
{
// Create Drop Down List from Data_Catalog
{
List<SelectListItem> testList = db.DATA_CATALOG.Select(x => new SelectListItem { Value = x.TRACK_NMBR.ToString(), Text = x.FILE_DESC, Selected = false }).DistinctBy(p => p.Text).ToList();
ViewBag.testList = new SelectList(testList, "Value", "Text");
return View();
}
// End Drop Down List
}
public async Task<ActionResult> List(string searchString, int keyword)
{
//Pass TRACK_NMBR to LIST via url
TRACK_NMBR_ViewModel vm = new TRACK_NMBR_ViewModel();
vm.TRACK_NMBR = keyword;
var catalogs = from m in db.FILE_RCPTS_LOG
select m;
{
catalogs = catalogs.Where(s => s.TRACK_NMBR.Equals(keyword));
}
return View(await catalogs.ToListAsync());
}
public class TRACK_NMBR_ViewModel
{
public int TRACK_NMBR { get; set; }
public string DISPOSITION { get; set; }
public DateTime DISPOSITION_DT { get; set; }
public string PROCESSED_BY { get; set; }
public DateTime DT_PROCESSED { get; set; }
public string TIMEFRAME_DESC { get; set; }
public string DTF_FILE_NAME { get; set; }
}
代码:索引视图
@section scripts{
<script type="text/javascript">
$(document).ready(function () {
$("#testList").on("change", function () {
window.location.href = "@Url.Action("Create")?keyword=" + $("#testList").val();
});
})
</script>
}
@Html.DropDownList("testList", null, "Select File")
代码:列表控制器
public ActionResult Index()
{
// Create Drop Down List from Data_Catalog
{
List<SelectListItem> testList = db.DATA_CATALOG.Select(x => new SelectListItem { Value = x.TRACK_NMBR.ToString(), Text = x.FILE_DESC, Selected = false }).DistinctBy(p => p.Text).ToList();
ViewBag.testList = new SelectList(testList, "Value", "Text");
return View();
}
// End Drop Down List
}
public async Task<ActionResult> List(string searchString, int keyword)
{
//Pass TRACK_NMBR to LIST via url
TRACK_NMBR_ViewModel vm = new TRACK_NMBR_ViewModel();
vm.TRACK_NMBR = keyword;
var catalogs = from m in db.FILE_RCPTS_LOG
select m;
{
catalogs = catalogs.Where(s => s.TRACK_NMBR.Equals(keyword));
}
return View(await catalogs.ToListAsync());
}
public class TRACK_NMBR_ViewModel
{
public int TRACK_NMBR { get; set; }
public string DISPOSITION { get; set; }
public DateTime DISPOSITION_DT { get; set; }
public string PROCESSED_BY { get; set; }
public DateTime DT_PROCESSED { get; set; }
public string TIMEFRAME_DESC { get; set; }
public string DTF_FILE_NAME { get; set; }
}
代码:列表视图
@section scripts{
<script type="text/javascript">
function myFunction () {
window.location.href = "@Url.Action("Create")?keyword=" + $("#testList").val();
}
</script>
}
@Html.ActionLink("Create New", "Create")
@Html.CheckBox("someID", new { @onclick = "myFunction();", htmlAttributes = new { @class = "form-control" } })
如您所见,我在视图上放置了一个复选框。当用户单击框添加新文件时,我想再次将关键字track\u nmbr发送到Create视图,并预填充track\u nmbr字段。但是,我的关键字现在没有定义。我不知道如何从url中获取它并将其传递到Create视图,就像我在Index to List视图中所做的那样
如果我可以将带有关键字的url发送到Create视图,我就可以得到其余的内容
同样,MVC5非常新,我感到非常头痛。C对我来说也是新的,因为我来自VB.net背景。然而,我发现使用vb.net在MVC5中找不到好的示例,因此我也在讨论c的学习曲线。您基本上需要将曲目编号从列表操作方法传递到视图,以便它可以用于创建创建链接url,在这里您可以将曲目编号值作为查询字符串项传递 由于未使用视图模型,因此可以使用ViewBag传递此数据
public async Task<ActionResult> List(string searchString, int keyword)
{
//Your existing code
ViewBag.Track = keyword;
return View(await catalogs.ToListAsync());
}
这将创建一个带有href value的锚定标记,其中包含一个带有key关键字的querystring项,其值将是您在列表操作方法中收到的任何值
确保创建操作方法具有接受querystring值的参数
public ActionResult Create(int keyword)
{
// to do : use keyword value
// to do : return something
}
您的示例代码不清楚。我已经复制并粘贴了它,但它没有调用列表控制器。它只调用创建视图。请查看,以便我们能有效地帮助您。查看包!!多么简单的解决方案啊。工作得很好!感谢您不仅提供了全面的回复,而且还分步骤进行了解释。这真的帮了我很大的忙。在阅读了您的回复后,我能够在几秒钟内解决这个问题。我根据需要填充了Create视图。非常感谢。很高兴知道。还要继续阅读视图模型以及如何使用它们。像ViewBags这样的动态工具不是一个很好的选择,它会导致输入错误,并且不会捕获: