动态分配属性值

时间:2019-02-02 10:21:03

标签: asp.net asp.net-mvc asp.net-web-api markdown razor-pages

我很难理解如何动态地为属性分配值,这意味着在运行时,以便我可以在剃刀页面中检索/显示值。我具有以下编程逻辑来完成任务,但是,此(LmitedWords)属性不会呈现或保留任何要显示的值。如何在运行时为此属性分配一个值。

public class Post 
{

   public string Content { get; set; }
   [NotMapped]
   public string LimitedWords { get; set; } 

 }

我的控制器代码如下:-

 public async Task<IActionResult> GetAllPosts()
        {
            var myLimitProperty = new Post();
            var result = await _repository.GetAllPosts();

            foreach (var post in result)
            {
                var limitContent = ContentExtension.ReturnLimitedDescription(post.Content, size);               
                myLimitProperty.LimitedWords = limitContent; 

            }
            return View(result);
        }    

我的contentextension帮助器方法返回了预期的值,并且在调试过程中确实显示了本地变量“ limitContent”具有该值,但是它不知何故没有将其分配给LimitedWords属性,该属性是Post类中的一个属性。

在我的Post类中,还有其他属性,我希望它们在保存在数据库中时显示出来。

“我的剃刀”页面不显示内容,因为它为空:

<div>
 <markdown markdown="@Model.LimitedWords">                    
</div>

谢谢!

1 个答案:

答案 0 :(得分:0)

根据您所发布的内容,result将保存存储库返回的帖子。

您循环浏览这些帖子,在操作中更新myLimitProperty局部变量,并返回原始集合。

发送给视图的对象实际上没有任何更新

从列表中创建一个投影,以填充应在视图中显示的所需属性。

public async Task<IActionResult> GetAllPosts() {
    var posts = await _repository.GetAllPosts();

    var result = posts.Select(post => {
        var limitContent = ContentExtension.ReturnLimitedDescription(post.Content, size);
        var model = new Post() {
            Content = post.Content;
            LimitedWords = limitContent; 
        };
        return model;
    }).ToList();

    return View(result);
}