0

ビューは次のとおりです。

    @if (stream.StreamSourceId == 1)
    {
        <img class="source" src="@Url.Content("~/Public/assets/images/own3dlogo.png")" alt="" />    
    }
    else if (stream.StreamSourceId == 2)
    {
        <img class="source" src="@Url.Content("~/Public/assets/images/twitchlogo.png")" alt="" />
    }

基本的に、Model プロパティを使用して、レンダリングする画像を決定します。

正しい解決策は、呼び出されたモデルにプロパティを作成し、そのプロパティを画像のソース URL として使用することですSourceImageUrl (string)

次に、この条件付き操作をモデルに転送します。

私の質問は、検証に DataAnnotations を使用している場合、どうすればこれを行うことができますか? 助言がありますか?

public class StreamModel
{
    // This is the ID that has the value of either 1 or 2.
    public int StreamSourceId { get; set; }

    // How can I move the logic from the view, to here, and set the value accordingly?
    public string SourceImageUrl { get; set; }    
}
4

2 に答える 2

1

このようなことはできませんか?

public string SourceImageUrl
{
    get
    {
        switch (StreamSourceId)
        {
            case 1: return "~/Public/assets/images/own3dlogo.png";
            case 2: return "~/Public/assets/images/twitchlogo.png";
            default: return null;
        }
    }
}
于 2012-07-05T15:35:15.003 に答える
1

ビューが次のようになるように、ロジックをモデルに移動することをお勧めします

    <img class="source" src="@Url.Content(stream.SourceImageUrl)" alt="" />

そしてあなたのモデルは

public class Model
{
    private string[] m_images;

    public Model()
    {
        m_images = new[] { 
               "~/Public/assets/images/own3dlogo.png", 
               "~/Public/assets/images/twitchlogo.png" 
               };
    }

    public string SourceImageUrl
    {

        get { return m_images[StreamSourceId]; }
    }
}

配列が気に入らない場合は、よりインテリジェントなコレクションに置き換えることができます: Dictionary 、 HashSet 、 ecc

于 2012-07-05T15:42:30.463 に答える