2012-03-30 20 views
1

我無法弄清楚爲什麼當它碰到我的操作方法時,carFileName爲null。我調試了視圖,當我遍歷該foreach循環時,carContent.CarFileName的循環的每次迭代中確實存在不同的值。因此,對於每個按鈕提交時,它應提交與該特定按鈕關聯的carFileName。Action Method Param始終爲空

@if (Model.CarFiles != null && Model.CarnFiles.Count > 0) 
{ 
    @foreach (CarContent carContent in Model.CarFiles) 
    { 
     using (Html.BeginForm("GetfileDownloadUrl", "Car", FormMethod.Get, new { carId = Model.CarId, userId = Model.UserId, @carFileName = carContent.CarFileName })) 
     { 
      @Html.Hidden("userId", Model.UserId); 
      @Html.Hidden("carId", Model.CarId); 
      @Html.Hidden("carFileName", carContent.CarFileName);   
      <p><input type="submit" name="SubmitCommand" value="download" /> @carContent.Name</p> 
     } 
    } 
} 

這裏是我的操作方法的簽名:

[HttpGet] 
public string GetFilDownloadUrl(string carFileUrl, int carId, int userId) 
{ 
      ... 
} 

,路線如下:

routes.MapRoute("CarDownloadFile", "Cars/{carId}/{userId}/{carFileName}", new { controller = "Car", action = "GetFileDownloadUrl", carnId = UrlParameter.Optional, userId = UrlParameter.Optional, carFileName = UrlParameter.Optional }); 
+2

我在'MapRoute'中看到'carnId',不應該是'carId'嗎?我還看到'carFileName'(MapRoute)vs'carFileUrl'(Controller)。 – Silvermind 2012-03-30 21:41:29

回答

0

可能是因爲在你的路線,你是指carFileName,但是你的動作方法需要carFileUrl和你您的RouteValueDictionary中的carId拼寫爲carnId

+0

是否將名稱從你的動作方法param,到您的路由參數,在表單中定義的匿名方法中的屬性都必須完全相同?那麼訂購怎麼樣? – PositiveGuy 2012-03-31 04:18:43

+0

我可能是錯的,但我非常確定它們必須是同一個名稱,除非您需要更改參數,否則您可以很容易地找到它的用法,這可能是一種很好的做法。訂購必須是一樣的。 – mattytommo 2012-03-31 09:46:49

+0

這個工作適合你嗎? :) – mattytommo 2012-04-11 17:46:50