Нулевая модель ASP.NET MVC передана в действие контроллера - PullRequest
4 голосов
/ 31 марта 2011

Почему нулевой параметр передается в следующее действие контроллера?

 public FileContentResult GetImageForArticle(ArticleSummary article) 
        {             
            if (article == null || !article.ContainsValidThumbNail()) return null;            
            return File(article.ThumbNail, article.ThumbNaiType);
        }  

из следующего частичного представления:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<AkwiMemorial.Models.ArticleSummary>>" %>
<%if (Model.Count() > 0)
  { %>
<table>    
    <% foreach (var item in Model)
       { %>    
        <tr>                        
             <td>  
               <img src='<%=Url.Action("GetImageForArticle", "Resources", new { article = item })%>' alt=""/>                                
            </td>
        </tr>

    <% } %>

    </table>

1 Ответ

6 голосов
/ 31 марта 2011

Вы не можете отправлять сложные объекты, как это:

<%=Url.Action("GetImageForArticle", "Resources", new { article = item })%>

Только простые скалярные свойства:

<%=Url.Action("GetImageForArticle", "Resources", new { 
    Id = item.Id,
    Foo = item.StringFoo,
    Bar = item.IntegerBar
})%>

Так что хорошей практикой в ​​этом случае является отправка только идентификатора:

<%=Url.Action("GetImageForArticle", "Resources", new { id = item.Id }) %>

и затем действие вашего контроллера извлекает соответствующую модель, где бы она ни хранилась, укажите этот идентификатор:

public ActionResult GetImageForArticle(int id) 
{             
    ArticleSummary article = _someRepository.GetArticle(id);
    if (article == null || !article.ContainsValidThumbNail()) 
    {
        return null;            
    }
    return File(article.ThumbNail, article.ThumbNaiType);
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...