将null参数从模型传递到控制器中的操作

时间:2013-05-28 10:26:39

标签: c# asp.net asp.net-mvc razor

我正在做一个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

为什么会这样?我怎么能纠正它?

2 个答案:

答案 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