2015-11-23 112 views
0

在List類型的視圖中,我試圖從視圖中將項目的id(這是一個電子郵件)傳遞給控制器​​中的actionResult:我使用以下代碼():從剃刀視圖傳遞一個ID到控制器

@Html.ActionLink("Contact", "CreateMessage", "Member", new { id = item.eMail }) 

我得到一個空引用,因爲傳遞的id爲null。

下面是其工作得很好,並在它的id是不是空的觀點:

@model IEnumerable<Mutuelle.Domain.Entities.Adherent> 

@{ 
    ViewBag.Title = "lister"; 
} 

<h2>Liste des adhérents</h2> 


<table class="table"> 
    <tr> 
     <body style="overflow:scroll;"> 
      <th> 
       @Html.DisplayNameFor(model => model.dateOfBirth) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.address) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.phoneNumber) 
      </th> 
      <th></th> 
    </tr> 

    @foreach (var item in Model) 
    { 
     <tr> 


      <td> 
       @Html.DisplayFor(modelItem => item.dateOfBirth) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.address) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.phoneNumber) 
      </td> 
      <td> 
       @Html.ActionLink("Contacter", "CreateMessage", "MembreComite", new { id = item.eMail }) 

      </td> 
     </tr> 
    } 

</table> 

這裏的控制器:

public ActionResult CreateMessage(string id) 
     { 
      Message message = new Message(); 
      return View(message); 

     } 
    [HttpPost] 
     public ActionResult CreateMessage(Message message, string id) 
     { 

      if (ModelState.IsValid) 
      { 
       AMDMService service = new AMDMService(); 

       Member member = service.GetMemberByeMail(id); 
       message.member = member; 

       message.adherentId = id; 



       member.listMessages.Add(message); 

       return RedirectToAction("listeMessages"); 

      } 
      return View(message); 

     } 
+0

其中exacly錯誤是什麼? –

+0

這是引起空引用錯誤的行(不能將值NULL插入到列adherentId中):'message.adherentId = id;'因爲從視圖傳遞的ID是NULL – Bellatrix

+1

這是表單POST提交嗎?表格的其餘部分在哪裏?使用瀏覽器的網絡監視器觀看請求 - 請求主體是什麼樣的?它與您的動作簽名相匹配嗎?另外,發送收藏時的「foreach」很少能一起工作。改用'for'循環。請參閱[這裏](http://stackoverflow.com/questions/16501118/asp-net-mvc-3-c-sharp-post-array-of-variables)。 – Jasen

回答

1

當您在ActionLink的使用像new { id = item.eMail } routeValues,然後你總是應該爲html attributes提供價值,它主要用於造型鏈接,所以如果你不想設計你的鏈接樣式,那麼你通過null,否則你通過這種方法如同new { @class = "btn btn-rounded btn-blue" })。所以,你的ActionLink代碼應該是這樣的,如果你不希望你的樣式鏈接:

@Html.ActionLink("Contact", "CreateMessage", "Member", new { id = item.eMail }, null); 

你也可以用@Url.Action幫手像下面替換@Html.ActionLink幫手:

<a href="@Url.Action("CreateMessage", "Member", new { id = item.eMail })"> Contact</a> 
+0

謝謝,問題解決 – Bellatrix

+0

@Bellatrix,那麼你應該接受答案。 –

相關問題