如何将<div>值传递给ASP.Net MVC中的另一个Controller?

时间:2019-05-24 20:59:55

标签: asp.net-mvc asp.net-mvc-5

我有 Home Customer 控制器

家庭控制器

public ActionResult Index()
{
    return view()
}

Index.cshtml

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

</div>
  

当用户在div上方单击时,它将重定向到 CustomerController 上的 Customer.cshtml ,并且还必须获取div data-csid值(jieg83ndks90)

CustomerController

public ActionResult Customer()
{
    return view()
}
  

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

1 个答案:

答案 0 :(得分:2)

您要问几件事:

  • 如何在JavaScript中处理点击事件
  • 如何在JavaScript中获取data- *值
  • 如何在JavaScript中重定向
  • 如何在URL上包含值
  • 如何在操作方法中接收值

让我们从第一个点击事件开始。由于您开始使用ASP.NET MVC,因此我将假定jQuery包含在项目模板中。因此,点击事件可能看起来像这样:

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

});

这将在用户每次使用<div>单击class="card"时调用该函数(当前为空)。在该函数中,您希望获取已单击的<div>的data- *属性的值:

$('div.card').on('click', function () {
    let csid = $(this).data('csid');
});

现在,您要重定向到URL并包含该值。在ASP.NET MVC中有多种构建URL的方法,其中一些在JavaScript中使用时有一些有趣的解决方法。但是,让我们保持简单。使用Url.Action帮助器,并记住它是一个字符串,因此请在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;
});

然后使用该网址访问redirect the user

$('div.card').on('click', function () {
    let csid = $(this).data('csid');
    let url = '@Url.Action("Customer", "Customer")' + '?csid=' + csid;
    window.location.href = url;
});

重要说明:差异似乎并不重要,但是了解正在发生的事情的语义非常重要。您不是将用户重定向到Customer.cshtml。您正在将用户重定向到控制器上的 action方法。当该操作方法返回视图时,该 view 将为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