4

教育目的で、クローン ソーシャル ブックマーク サービス (reddit に似ています) を構築しています。リストの各「ブックマーク」の下に、ソース URL のベース ドメインを表示したいと思います (完全な URL.

これを行う方法について SO でいくつかのスレッドを既に見つけたので、先に進んで機能を抽象化するクラスを作成しましたが、実際にメソッドを呼び出す必要がある場所がわかりません。

現時点では、オブジェクトBookmarkListのリストをビューに渡すコントローラー メソッドがBookmarkあり、そこでリストを反復処理しています。オブジェクトにはベース URL を格納するためのプロパティがないためBookmark(オンザフライで計算しているため)、Bookmarkオブジェクトをビューに渡す前にオブジェクト内に配置することはできません (とにかく間違っているようです)。ビュー自体から作成した GetDomainFromUrl メソッドを呼び出す必要がありますか? どういうわけか、それも適切ではありません。

MVC の慣習を破ることなく、この機能に適合する方法がわかりません。

ありがとう。

4

3 に答える 3

4

それをBookmarkクラスに追加します。プロパティを計算できます。これは、msdn(MSDNソース)のasp.netmvcに関するチュートリアルの例です。

    public string LastName { get; set; }
    public string FirstMidName { get; set; }

    public string FullName
    {
        get
        {
            return LastName + ", " + FirstMidName;
        }
    }

文字列を単純に連結する代わりに、ここでGetDomainFromUrlメソッドを呼び出します。

IE、

public string BaseUrl
{
    get
    {
        return GetDomainFromUrl(this.Url);
    }
}

Urlプロパティを設定できる/設定する可能性があるため、setメソッドが定義されていないことに注意してください。

また、URLは文字列として保存されていますか?

URIクラスを使用している場合は、記事のURLがFullUrlというプロパティで定義されていると仮定して、this.FullUrl.Hostを使用できます(これは、学校。)

于 2012-09-13T01:57:09.217 に答える
1

非常に基本的なシナリオ、またはモデルを完全に制御できる場合、MVC (モデル、ビュー、コントローラー) は適切なパターンです。

私の経験では、通常、実際のモデルではなくビューにとって重要な追加情報が必要です。たとえば、モデル プロパティに表示されるドロップダウン アイテムのリスト、またはあなたの場合は、ユーザーが表示するサイトのベース URL を配置します。

この場合、MVC を VM-VC ( ViewModel、 View、Controller )に適合させるのが好きです。

基本的に、Bookmark ViewModel を作成し、ビューをレンダリングするときにそれを使用する必要があります。

BookmarkViewModel.cs:

public class BookmarkViewModel
{
    public string BaseUrl {get;set;}

    // + all existing bookmark properties
}

ビュー モデルに直接ベース URL 関数を追加してビュー モデルに関数自体を実行させるか、ビュー モデルの作成時にコントローラーで実行することができます。

于 2012-09-13T01:54:59.460 に答える
0

これを行う方法には、いくつかの異なるオプションがあります。Bookmark クラスに GetDomainFromUrl() メソッドを格納することをお勧めします。また、BaseUrl のプロパティも作成することをお勧めします。

次に、完全な Url をコンストラクターの Bookmark オブジェクトに渡し、関数を実行して、それを BaseUrl プロパティに設定することができます。

class Bookmark
{
    public string BaseUrl { get; }

    public Bookmark(string url)
    {
        BaseUrl = GetDomainFromUrl(url);
    }

    private string GetDomainFromUrl(string url)
    {
        //your logic to generate BaseUrl
    }
}

別の方法として、次のような方法があります。

class Bookmark
{
    private string baseUrl;

    public string BaseUrl
    {
        get
        {
            return baseUrl;
        }
        set
        {
            baseUrl = GetDomainFromUrl(value));
        }
    }

    private string GetDomainFromUrl(string url)
    {
        //your logic to generate BaseUrl
    }
}

次に、コード内の BaseUrl プロパティ somplace を完全な URL の値に設定します。そうすると、関数が実行され、プロパティに保存されます。

于 2012-09-13T01:56:14.100 に答える