我有一个操作方法在我的控制器中返回JsonResult
:
public JsonResult GetDetails()
{
var rows = //Linq-To-SQL
//Linq-To-Entities
var lifts = (from r in rows
group r by new { r.LiftID, r.LiftDate } into g
select new
{
ID = g.Key.LiftID,
Date = g.Key.LiftDate.ToShortDateString(),
Driver = g.Where(x => x.IsDriver)
.Select(x => x.p).Single().Name,
Passengers = g.Where(x => !x.IsDriver)
.Select(x => x.p.Name)
.Aggregate((x, y) => x + ", " + y)
}).ToList();
return Json(lifts);
}
我在jQuery脚本中使用结果写出一个表。
数据如下:
1 | 20/06/2010 |大卫尼尔|约翰史密斯,保罗琼斯
等...
我希望这些名称是到路由Person\{id}
的超链接。 <a href="\Person\7">David Neale</a>
。 p
属性对应于包含Person
和Name
的{{1}}对象。
我不想手动构建URL。如何构建对象以使用MVC路由引擎将名称包含为超链接?
答案 0 :(得分:1)
这很容易。
只需使用Url.Action(“actionName”,“controllerName”,params)
它将使用路由引擎创建一个字符串,因此如果您更改路由,您的代码将保持正常工作
答案 1 :(得分:0)
首先,我认为您的model
或Linq-To-SQL
或Linq-To-Entities
查询中存在错误。因为你没有 ID
为你的人(司机和通道),如果你想要一个带有人的身份证的链接,你肯定会需要它。我认为您需要从人员中拆分 Lifts 并拥有 2个单独的实体(当然是通过其ID进行链接)。
其次,您需要将人员的ID从Controller传递给视图。
class Lift
{
public int LiftID { get; set; }
public DateTime LiftDate { get; set; }
public IEnumerable<Person> p { get; set; }
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsDriver { get; set; }
}
public JsonResult GetDetails()
{
var rows = new Lift[] { //Linq-To-SQL and Linq-To-Entities replaced by an example
new Lift{LiftID = 1, LiftDate= DateTime.Now, p = new Person[] {
new Person{IsDriver = true, Id = 1, Name = "David Neale"},
new Person{IsDriver = false, Id = 2, Name = "John Smith"},
new Person{IsDriver = false, Id = 3, Name = "Paul Jones"}
}},
new Lift{LiftID = 2, LiftDate= DateTime.Now, p = p = new Person[] {
new Person{IsDriver = true, Id = 4, Name = "Daniel Faraday"},
new Person{IsDriver = false, Id = 2, Name = "John Smith"}
}}
};
var lifts = (from r in rows
select new
{
ID = r.LiftID,
Date = r.LiftDate.ToShortDateString(),
Driver = r.p.Where(x => x.IsDriver)
.Select(x => x.Name).Single(),
Passengers = r.p.Where(x => !x.IsDriver)
.Select(x => x.Name)
.Aggregate((x, y) => x + ", " + y)
}).ToList();
return Json(lifts);
}
然后,一旦您在视图上获得了ID,就可以使用它来使用Html.ActionLink
建立链接:
<%= Html.ActionLink("Person", "Index", new { id = p.Id })%>
答案 2 :(得分:0)
如果您事先知道动作和控制器,您可以执行以下操作:
var baseURL = '<%=Url.Action("MyAction","MyController") %>';
然后从jQuery手动构建链接,href设置为baseUrl+"/"+personId