Viewbag id不返回任何数据

时间:2017-11-06 14:33:44

标签: c# asp.net-mvc database viewbag

这是我的index.cshtml的开头:

@model IEnumerable<UsageReportViewModel>
@{
    ViewBag.Title = "UsageReport";
}

<h2>UsageItem</h2>

@(Html.Kendo().Grid(Model)
.Name("Index")
.DataSource(data => data
.Ajax()
.Read(read => read.Action("GetUsageItems", "UsageReport", new { id = ViewBag.usageReportId }))
.Model(model => model.Id(m => m.Id))

^指数:

public ActionResult Index(int id)
{
    return View();
}
public ActionResult Details(int id)
{
    ViewBag.usageReportId = id;
    return View();
}
public ActionResult Get([DataSourceRequest] DataSourceRequest request)
{
    var GetFile = UsageReportSelection();
    return Json(GetFile.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
public ActionResult GetUsageItems([DataSourceRequest] DataSourceRequest request)
{
    int id = ViewBag.usageReportId; // <--
    var GetFile = UsageReportItems(id);
    return Json(GetFile.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

方法GetUsageItems的int id返回“0”。我需要这个来传递一些数据,比如公共ActionResult索引正在使用Get方法。我知道我做错了什么只是不确定是什么。

1 个答案:

答案 0 :(得分:0)

你没有像你想要的那样获得ViewBag.usageReportId的价值。您传递的read => read.Action方法的ViewBag值将作为服务器端Action方法的额外参数。

因此,您有两种方法可以在控制器操作方法中访问此值。

One - 更改控制器操作方法以获得以下额外参数。

public ActionResult GetUsageItems([DataSourceRequest] DataSourceRequest request, int id)
{
    var GetFile = UsageReportItems(id);

    return Json(GetFile.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

按照https://www.telerik.com/forums/pass-additional-parameters-to-read-ajax-datasource-method---mvc了解该示例。

两个 - 从QueryString参数访问id

public ActionResult GetUsageItems([DataSourceRequest] DataSourceRequest request)
{
    var id = Convert.ToInt32(Request.QueryStrings["id"]);
    var GetFile = UsageReportItems(id);
    return Json(GetFile.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

这可以帮助您解决问题。