0

私は ASP.Net MVC および MVC アーキテクチャ全般に不慣れです。Database Code First メソッドを使用して単純なアプリケーションを構築しています。

cookIdレシピを作成したユーザーのIDであるというプロパティを持つレシピモデルがあります。

今、クエリ文字列を自分のページに渡し、cookId がパラメーターと同じであるレシピのみを取得し、ビューに i をリストできるようにしたいと考えています。

どうすればこれを達成できますか?このロジックをどこに置くべきですか?私controllerまたは私のview

4

4 に答える 4

2

まあ、asp.net mvc はルート、または TableRoutes で動作します。デフォルト ルートは次の形式で作成されます: {controller}/{action}/{id}.

したがって、アクションでリクエストを取得すると、アクションのパラメーターからこの id を取得しid(コントローラーで)、この値を使用してデータベースにヒットし、ビューに表示する必要があるすべてのレコードを取得できます。あなたはこれに似た何かを試すことができます:

public ActionResult Recipes(string id)
{
   IEnumerable<Recipe> list = _repository.GetRecipeByCookId(id); // this method should return list of Recipes

   return View(list); // return your View called "Recipes" passing your list
}

Id を取得するために使用することもできますRequest.QueryString["Id"]が、asp.net mvc では適切な方法ではありません。アクションにパラメーターを使用して使用できます。

ビューでは、次のように入力IEnumerable<Recipe>してテーブルに表示できます。

@model IEnumerable<Recipe>

<table>
    @foreach(var recipe in Model)
    {
        <tr>
            <td>@recipe.Name</td>           
            <td>@recipe.CookId</td>
            <td>@recipe.OtherProperties</td>
        </tr>
    }
</table>

Html.ActionLinkリクエストに対してこの ID を渡すリンクを作成するには、View で次のように使用できます。

@Html.ActionLink("Text of You Link", "Action", "Controller", new { id = 5, another = 10 }, new { @class = "css class for you link" });

また、asp.net mvc は、global.asaxaで設定されたルート テーブルに従って、適切なルートを持つタグをレンダリングします。クエリ文字列に渡す他のパラメーターがある場合は、パラメーターを使用してサンプルで行ったように追加することもできanotherます。

于 2012-12-28T21:17:11.933 に答える
1

あなたはCooksControllerを持っているかもしれません。そのコントローラーは料理人のリストを返します。そのリストには、料理人のレシピへのリンクが含まれている場合があります。RecipesControllerは、特定のcookIdのすべてのレシピのリクエストを処理できます。

@Html.ActionLink("Recipes", "RecipesByCook", "Recipes", new { cookId = model.cookId }, null};

上記のコードは、ビューCooks/Index.shtmlで使用されます。クエリ文字列を使用して、必要に応じてcookIdを識別するリンクを作成します。

RecipesControllerには、cookIdのパラメーターを受け取るRecipiesByCookメソッドがあります。このメソッドは、Home / Recipies / RecipeByCook?cookId=4のようなURLのリクエストを処理します。

その後、RecipesControllerは、表示するレシピの正しいセットを含むActionResultを返すことができます。非常に単純です(料理人に関する情報のように、ビューに表示するものをさらに追加したい場合があります):

    public ActionResult RecipesByCook(int cookId)
    {
        var recipes = repository.Recipes.Where(r => r.cookId == cookId);

        return View(recipes);
    }
于 2012-12-28T21:45:41.337 に答える
1

コントローラ:

[HttpGet]
public ActionResult GetRecipes(int cookId)
{
    // model can view a List<Recipe>, logic goes here
    var model = SomeQueryThatReturnsRecipesFrom(cookId);
    return View(model)
}

ビュー (たとえば、views\yourController\GetRecipes.cshtml) は、このファイルを使用してデータを表示するだけです。ここにロジックを配置することはお勧めしません。

@model List<Namespace.Recipe>

<h2>Recipes</h2>

@foreach(var r in Model)
{
    <p>r.Name</p>
}

これは、次のクエリ文字列で呼び出されます。

/Recipes/GetRecipes?cookId=SomeId
于 2012-12-28T21:14:58.250 に答える
1

ビューにロジックを入れないでください。ビューには、モデルで提供される情報が表示されるだけです。コントローラーにロジックを入れます。

コントローラ:

[HttpGet]
public ActionResult Recipes(int cookId)
{
     var recipes = /* get recipes based on cook */;
     List<RecipeModel> model = recipes
         .Select(r => new RecipeModel
         { 
            Id = r.Id,
            CookId = r.CookId,
            ...
         })
         .ToList();
     return View(model);
}

意見:

@model List<RecipeModel>

@foreach (RecipeModel item in Model)
{
    <div>
        <span>Id:</span>
        <span>@item.Id</span>
    </div>
}
于 2012-12-28T21:10:41.063 に答える