我正在做一个asp .net mvc apllication,我有一些问题: 我有这个包含动作链接的视图
<form >
<fieldset>
<legend>Formulaire d'un client</legend>
@if (Model.Count != 0){
foreach (string s in Model)
{
<a href="@Url.Action("Passer", "Client",(object)@s)" style="color:blue" >@s</a>
<br />
}
}
else{
<label> Pas de projets actuellement</label>
}
</fieldset>
</form>
它称之为此行动:
public ActionResult Passer(string s)
{
Upload.Models.ProjetModels prj = new ProjetModels();
Upload.Models.CompteModels.Id_directory = prj.GetProjectsId(s);
int _id_directory = Upload.Models.CompteModels.Id_directory;
int _id_akeo = prj.GetAkeoIdFromProjet(_id_directory);
int _id_client = Upload.Models.CompteModels.Id_connected;
Upload.Models.AkeoModels ak = new AkeoModels();
string _nom_akeo = ak.GetNameAkeoByID(_id_akeo);
Upload.Models.DetailsModels detail = new DetailsModels { Id_akeo = _id_akeo, Id_client = _id_client, Id_directory = _id_directory, Nom_akeo = _nom_akeo };
return View(detail);
}
我的问题是参数s
,当我点击链接时,它总是null
。
为什么会这样?我怎么能纠正它?
答案 0 :(得分:2)
我的问题是参数s,当我点击链接时它总是为空。
因为您的链接看起来像/Client/Passer/123
。您可以通过查看生成的HTML,使用Fiddler调试HTTP请求或在单击链接后查看浏览器的地址栏来看到这一点。
Url.Action()
的第三个参数routeValues
是一个对象,它被映射到被调用的action方法的参数。由于您的ActionResult Passer
签名为string s
,因此您需要传递一个具有名为s
的字符串属性的对象。
所以改变
(object)@s
要
new { s = s }
后者将导致创建一个匿名对象,其中包含一个包含值string s
的{{1}}属性。您可能希望查看变量命名。
答案 1 :(得分:1)
试试这个,
@Url.Action("Passer", "Client", new {s = s})
您没有将参数作为路由值传递。访问链接进行详细说明。
参考:http://msdn.microsoft.com/en-us/library/dd460348(v=vs.108).aspx