Javascript 在MVC5的URL中传递变量

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。因此,我希望创建视图打开并预填充

我正在编码MVC5和C

我有一个索引视图,它有一个由控制器填充的dropdownlist,其中有两个表字段File\u Desc&Track\u Nmbr。当用户从下拉列表中选择一个文件描述时,它会触发一个javascript重定向,并将该轨迹作为“关键字”传递给一个名为“列表”的视图。列表然后显示数据库中具有相同轨迹的所有项目\u Nmbr。这部分都按设计工作

我迷路的地方是下一步。在列表视图中,用户查看当前项目后,可以输入与此跟踪相关联的新项目\u Nmbr。因此,我希望创建视图打开并预填充Track\u Nmbr字段

我可以很容易地从“索引视图”下拉列表中获取曲目,并将其传递到列表视图。但是如何将其再次传递给Create视图呢?因为我再也无法从下拉列表中抓取它了

我一直在寻找和阅读,但时间是关键。我仍然会继续寻找信息,并尽我最大的努力解决它,但我是在砖墙。我对MVC5很陌生

我将分享我的所有代码,这样您就可以看到我到目前为止是如何设置的。我正在寻找打开“创建”视图并预填充田径场的最简单解决方案

代码:索引控制器

   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这样的动态工具不是一个很好的选择,它会导致输入错误,并且不会捕获: