从视图发送字符串到asp.net中的控制器

时间:2016-01-03 16:22:51

标签: asp.net-mvc

我试图从字符串

中的视图中获取数据

这里是View

中的代码



<a href="/Admin/ViewCustomerDetails/@customer.name"> </a>
&#13;
&#13;
&#13;

在控制器中,我得到这样的客户名称:

&#13;
&#13;
 public ActionResult ViewCustomerDetails(string c_name) {

            List<Sale> customerList = new List<Sale>();
            customerList = db.Sales.Where(x => x.sale_customer == c_name).ToList();

            double total_cash_recieved = 0;
            double total_amount = 0;
            foreach (var customer in customerList) {
                total_cash_recieved = total_cash_recieved + (double)customer.cash_recieved;
                total_amount = total_amount = (double)customer.sale_amount;
            }
            double remaining_balance = total_amount - total_cash_recieved;
            ViewBag.TotalAmount = total_amount;
            ViewBag.TotalRecieved = total_cash_recieved;
            ViewBag.TotalRemaining = remaining_balance;
            return View(customerList);
        }
&#13;
&#13;
&#13;

但问题是,在c_name变量中,我得到了null。 有谁知道如何纠正它或解决方案?

4 个答案:

答案 0 :(得分:2)

由于您的参数名称为c_name,因此您应该将其包含在您的查询字符串中,就像Burak在答案中提到的那样。

如果您愿意,可以使用Html.ActionLink辅助方法呈现链接。

Html.ActionLink("View","ViewCustomerDetails","Admin",new { c_name=customer.name},null)

或者,如果您希望保留现有的网址,可以将ViewCustomerDetails方法的参数名称更新为Id,以便使用默认路由定义,您的未命名参数值将被映射到Id参数。

public ActionResult ViewCustomerDetails(string id) {
  var c_name=id;
  // your existing code
}

传递唯一ID( 客户ID 等...)而不是传递名称来显示详细信息总是一个好主意,因为我知道不止一个世界scott

答案 1 :(得分:0)

你应该这样发送:

<a href="/Admin/ViewCustomerDetails?c_name=@customer.name"> </a>

确保@customer.name在转到服务器端之前不为空。

答案 2 :(得分:0)

或者您可以设置到RouteConfig.cs的新路线

routes.MapRoute(
            name: "Default2",
            url: "Admin/ViewCustomerDetails/{c_name}",
            defaults: new { controller = "Admin", action = "ViewCustomerDetails", c_name= UrlParameter.Optional }
        );

答案 3 :(得分:0)

您没有将参数传递给控制器​​。

只要控制器上的操作方法完全符合签名中的相同名称,您就可以随时将参数作为查询字符串的一部分传递。