0

私は ASP.NET を使用してきましたが、ASP.Net MVC 4 と Razor の概念にはかなり慣れていません。私の質問は基本的なものかもしれませんが、何日も明確な答えを見つけることができなかったので(または間違ったことを探しています)、すべての助けに感謝します。問題は、Index Method を使用せずにビュー内の Controller メソッドにアクセスするにはどうすればよいかということです。

シナリオ:

  • 日付、価格などの値を格納するデータベースがあります... (変数はモデルで定義されています。

  • ビューインデックスを設定するコントローラーがあります

  • データベースの値を含む Indexpage を表示するビューがあります。

価格列のすべての値を合計したいのですが、結果をデータベースに保存したくありません。私の理解では、コントローラークラスのメソッドを介してデータベースにアクセスし、ビューでこのメソッドを呼び出します。

ステップごとに学習するために、コントローラーで固定値を定義して、この値をビューに表示する方法を確認しました。

コード:

Model:

[Range(1, 100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; } // Amount of an entry

Controller:

     public ActionResult Index()
        {
             return View(db.Amounts.ToList());
        }

      public ActionResult ShowSumOfAllPrices()
        {

            //For testing db is not called yet. Query must be defined and result written to a variable within this mehod
            ViewBag.Price = 2;

            return View();
        }

View:

@*testmethod for displaying sumprize (first just wit test result) via controler*@


    <table>
    <tr>   
        <td>hallo @ViewBag.Price</td>
    </tr>
    </table>

ShowSumOfAllPrices()メソッドで(コントローラー クラスで)のメソッド コンテンツを定義しない限り、結果は表示されません index()

問題は、ビュー内のメソッドの結果はIndex()、コントローラーのメソッド内で定義した場合にのみ表示されますか?それとも、私が行ったように追加のメソッドを記述してビューで呼び出すことができますか? ShowSumOfAllPrices()toのロジックを c&p するとうまくいきますIndex()。しかし、index メソッドですべてを定義する必要はないと思います。もしそうなら、それは大きくて太った方法になります。したがって、私が見る限り、3つの可能な方法がありますが、すべてが「いい」または機能しているわけではありません。

  1. メソッドですべてを定義しますIndex()
  2. 他のメソッドを定義しますが、それらのデータをデータベースに保存したくないため、モデルを使用せずにビュー内に表示する唯一の方法であるため、Index メソッドでそれらを呼び出します
  3. 他のメソッドを定義し、新しいページを作成せずに自分のビューでそれらを直接呼び出すことができますが、このメソッドの結果のみが現在のインデックス ページのコンテンツの下に表示されます。

私の質問が理解できることを願っています。この質問は以前の私のように尋ねられたものではありません。

4

1 に答える 1

0

Index() メソッドですべてを定義します。

コントローラーはロジックを保持するためのものではありません。

他のメソッドを定義しますが、それらのデータをデータベースに保存したくないため、モデルを使用せずにビュー内に表示する唯一の方法であるため、Index メソッドでそれらを呼び出します

コントローラー自体で他のメソッドを定義しないでください。他のクラスを作成してから、Index()または適切なコントローラ メソッドでそれらのメソッドを呼び出します。ビューにデータを表示したい場合は、モデルが最適ですが、データをViewBag

他のメソッドを定義して、新しいページを作成せずに自分のビューでそれらを直接呼び出すことができますが、このメソッドの結果のみが現在のインデックス ページのコンテンツの下に表示されます。

同じビューでメソッドの結果を取得したい場合は、[同じ種類の AJAX を使用している可能性があります] の場合がありますが、他のページをレンダリングしたい場合は、これは悪い考えかもしれません。

あなたができる最善のことは、必要な機能のクラスを単一責任の原則として宣言し、そのクラスを使用して、結果を取得したいメソッドでその操作を行うことです.AJAXとJQueryを使用してコントローラーメソッドにアクセスできます.少しグーグルで検索すると、あなたはあなた自身になります。

お役に立てれば。

于 2013-02-12T14:05:40.140 に答える