我正在编码MVC5和C#。
我有一个索引视图,该视图仅包含一个由控制器填充的下拉列表-带有两个表字段(File_Desc和Track_Nmbr)。当用户从下拉列表中选择File_Desc时,它会触发JavaScript进行重定向,并将Track_Nmber作为“关键字”传递给名为“列表”的视图。然后,列表显示数据库中具有相同Track_Nmbr的所有项目。这部分全部按设计工作。
下一步,我会迷路的地方。在列表视图中,用户查看当前项目后,可以输入与该Track_Nmbr关联的新项目。因此,我希望创建视图打开并预填充Track_Nmbr字段。
我可以从索引视图下拉菜单中轻松捕获TRACK_NMBR并将其传递给列表视图。但是如何将其再次传递给“创建视图”?因为我再也无法从下拉列表中抓住它了。
我一直在搜索和阅读,但是时间至关重要。我仍然会继续寻找信息并尽力解决它,但我处在困境中。我是MVC5的新手。
我将共享我的所有代码,以便您可以了解到目前为止我是如何进行设置的。我正在寻找打开“创建视图”并预填充TRACK_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
}
代码:索引视图
@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 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" } })
如您所见,我在视图上放置了一个复选框。当用户单击框以添加新的File_Desc时。我想(再次)将关键字(track_nmbr)发送到“创建”视图并预先填充Track_Nmbr字段。但是,我的关键字现在不确定。而且我不知道如何像从“索引到列表”视图中那样从网址中获取它并将其传递给“创建”视图。
如果我可以将带有关键字的url发送到“创建视图”,则可以获取其余信息。
再次,对于MVC5来说还很新,我感到非常头疼。 C#对我来说也是新手,因为我来自VB.net。但是,我发现无法使用vb.net在MVC5中找到好的示例,因此我也在解决c#的学习问题。
答案 0 :(得分:0)
您基本上需要将跟踪号从List
操作方法传递到视图,以便可以将其用于创建Create
链接URL,您可以在其中将跟踪号值作为查询字符串传递项目
由于您没有使用视图模型,因此可以使用ViewBag传递此数据。
public async Task<ActionResult> List(string searchString, int keyword)
{
//Your existing code
ViewBag.Track = keyword;
return View(await catalogs.ToListAsync());
}
现在,在您的视图中,您可以使用ActionLink
重载之一,该重载带有一个路由值字典对象。
@Html.ActionLink("Create New", "Create","Home",new { keyword = ViewBag.Track }, null)
这将创建一个带有href值的锚标记,其中包含带有键keyword
的querystring项,并且该值将是您在List
操作方法中收到的任何值。
确保您的Create
动作方法具有接受查询字符串值的参数
public ActionResult Create(int keyword)
{
// to do : use keyword value
// to do : return something
}