Asp.net mvc 如何通过<;部门>;ASP.Net MVC中的其他控制器的值?

Asp.net mvc 如何通过<;部门>;ASP.Net MVC中的其他控制器的值?,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,我有主页和客户控制器 家庭控制器 public ActionResult Index() { return view() } public ActionResult Customer() { return view() } Index.cshtml <div class="card" data-csid="jieg83ndks90"> </div> 注意:我想从index.cshtml重定向到Customer.cshtml,并将值(jieg83nd

我有主页客户控制器

家庭控制器

public ActionResult Index()
{
    return view()
}
public ActionResult Customer()
{
    return view()
}
Index.cshtml

<div class="card" data-csid="jieg83ndks90">

</div>
注意:我想从index.cshtml重定向到Customer.cshtml,并将值(jieg83ndks90)也传递到Customer.cshtml


你问了几个问题:

  • 如何在JavaScript中处理单击事件
  • 如何在JavaScript中获取数据-*值
  • 如何在JavaScript中重定向
  • 如何在URL上包含值
  • 如何在操作方法中接收值
让我们从第一个开始,单击事件。由于您刚刚开始使用ASP.NETMVC,我假设jQuery包含在项目模板中。因此,单击事件可能如下所示:

$('div.card').on('click', function () {

});
这将在用户使用
class=“card”
单击
时调用该函数(当前为空)。在该函数中,您希望获取单击的
的data-*属性的值:

$('div.card').on('click', function () {
    let csid = $(this).data('csid');
});
现在您需要重定向到URL并包含该值。在ASP.NET MVC中构建URL有多种方法,有些方法在JavaScript中使用时有有趣的变通方法。但让我们保持简单。使用
Url.Action
helper,记住用JavaScript将其括起来,因为它是一个字符串:

$('div.card').on('click', function () {
    let csid = $(this).data('csid');
    let url = '@Url.Action("Customer", "Customer")';
});
(建议您查看浏览器中的页面源以查看生成的内容。)并且您可以将该值添加到生成的URL的查询字符串中:

$('div.card').on('click', function () {
    let csid = $(this).data('csid');
    let url = '@Url.Action("Customer", "Customer")' + '?csid=' + csid;
});
然后使用该URL:

重要提示:差异似乎不重要,但理解发生的事情的语义非常重要。您没有将用户重定向到
Customer.cshtml
。您正在将用户重定向到控制器上的操作方法。当该操作方法返回一个视图时,该视图将是
Customer.cshtml

当您想要使用查询字符串上的值时,这一点变得非常重要。因为用户要使用action方法,所以在action方法中获取该值:

public ActionResult Customer(string csid)
{
    return View();
}
现在问题显然变成了。。。您计划如何处理该
csid
值。这差不多就是你问题的背景。此时,您已使用该值重定向用户,如何使用该值取决于您自己。如果要将其从控制器操作传递到视图,则标准方法是在传递到视图的模型上设置值。例如:

public ActionResult Customer(string csid)
{
    var model = new SomeViewModel { CSID = csid };
    return View(model);
}
然后,在您的视图中,将这一行放在顶部以绑定到该模型:

@model SomeViewModel

从那里,您可以在视图中的任何位置访问
Model.CSID

您提出了几个问题:

  • 如何在JavaScript中处理单击事件
  • 如何在JavaScript中获取数据-*值
  • 如何在JavaScript中重定向
  • 如何在URL上包含值
  • 如何在操作方法中接收值
让我们从第一个开始,单击事件。由于您刚刚开始使用ASP.NETMVC,我假设jQuery包含在项目模板中。因此,单击事件可能如下所示:

$('div.card').on('click', function () {

});
这将在用户使用
class=“card”
单击
时调用该函数(当前为空)。在该函数中,您希望获取单击的
的data-*属性的值:

$('div.card').on('click', function () {
    let csid = $(this).data('csid');
});
现在您需要重定向到URL并包含该值。在ASP.NET MVC中构建URL有多种方法,有些方法在JavaScript中使用时有有趣的变通方法。但让我们保持简单。使用
Url.Action
helper,记住用JavaScript将其括起来,因为它是一个字符串:

$('div.card').on('click', function () {
    let csid = $(this).data('csid');
    let url = '@Url.Action("Customer", "Customer")';
});
(建议您查看浏览器中的页面源以查看生成的内容。)并且您可以将该值添加到生成的URL的查询字符串中:

$('div.card').on('click', function () {
    let csid = $(this).data('csid');
    let url = '@Url.Action("Customer", "Customer")' + '?csid=' + csid;
});
然后使用该URL:

重要提示:差异似乎不重要,但理解发生的事情的语义非常重要。您没有将用户重定向到
Customer.cshtml
。您正在将用户重定向到控制器上的操作方法。当该操作方法返回一个视图时,该视图将是
Customer.cshtml

当您想要使用查询字符串上的值时,这一点变得非常重要。因为用户要使用action方法,所以在action方法中获取该值:

public ActionResult Customer(string csid)
{
    return View();
}
现在问题显然变成了。。。您计划如何处理该
csid
值。这差不多就是你问题的背景。此时,您已使用该值重定向用户,如何使用该值取决于您自己。如果要将其从控制器操作传递到视图,则标准方法是在传递到视图的模型上设置值。例如:

public ActionResult Customer(string csid)
{
    var model = new SomeViewModel { CSID = csid };
    return View(model);
}
然后,在您的视图中,将这一行放在顶部以绑定到该模型:

@model SomeViewModel

从那里,您可以在视图中的任何位置访问
Model.CSID

您如何准确地重定向用户?您可以在重定向中包含该值,并在控制器操作方法中接收该值。@David您能检查更新吗?您到底是如何重定向用户的?您可以在重定向中包含该值,并在控制器操作方法中接收该值。@David您能检查更新吗