MVC初心者の質問:
go/{mainnav}/{subnav}
という形式のURLを取得しています。これはGoController
クラスのメソッドに正常にルーティングされています。
public ActionResult Index(string mainnav, string subnav) {
return View();
}
ここまでは順調ですね。しかし、mainnavまたはsubnavの値に応じて、ビューが異なるHTMLを返すようにしたいと考えています。具体的には、javascriptブロック内に次の行を含めます。
myobj.mainnav = [value of mainnav parameter];
そして、subnavがnullまたは空でない場合のみ:
myobj.subnav = [value of subnav parameter];
分離コードのないaspxページにこれらのパラメーターをどのように渡しますか?
ViewModel
クラスを使用してデータを転送します。
public class IndexViewModel
{
public string MainNav { get; set; }
public string SubNav { get; set; }
public IndexViewModel(string mainnav, string subnav)
{
this.MainNav = mainnav;
this.SubNav = subnav;
}
}
その後、アクションメソッドが表示されます
public ActionResult Index(string mainnav, string subnav)
{
return View(new IndexViewModel(mainnav, subnav));
}
これは、ビューを厳密に入力する必要があることを意味します。
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<YourNameSpace.IndexViewModel>" %>
ビューで、次のようにデータを出力します。
myobj.mainnav = <%: Model.MainNav %>;
MVC3を使用する場合の代替ソリューションは、動的ViewBag
を使用することです。
public ActionResult Index(string mainnav, string subnav)
{
ViewBag.MainNav = mainnav;
ViewBag.SubNav = subnav;
return View();
}
そのようにページでアクセスされます:
myobj.mainnav = <%: ViewBag.MainNav %>;
ただし、 nobtrusive javascript を読んで、この特定の問題を回避するために設計を改善できるかどうかを確認することをお勧めします。
MVC3を使用している場合、値をViewBag
に渡すことをお勧めします。
ViewBag.MainNav = "xxxx";
ViewBag.SubNav = null;
次に、JavaScriptを定義して値を追加するビューページで。
ViewData["MainNav"]
)を使用する場合、MVC 3を持っていない場合、値を保存しても同じ効果があります。
ビューのリクエストからパラメーターにアクセスしようとしましたか?
つまり.
Request.Params["mainnav"]
または
Request.Params["subnav"]
MVCで動作します
私は次のアプローチを使用しています:
ViewModel.class:
public class TitleBodyModel
{
public string Title { get; set; }
public string Body { get; set; }
public TitleBodyModel() { Title = Body = ""; }
public TitleBodyModel(string t, string b) { this.Title = t; this.Body = b; }
}
メインビューで:
@Html.Partial("_TitleBody" , new XXX.Models.TitleBodyModel("title", "body" ))
次に、部分ビューで:
@model XXX.Models.TitleBodyModel
<div class="bl_item">
<div class="bl_title">@Model.Title</div>
<div class="bl_body">@Model.Body</div>
</div>
私はこれが解決策であると理解すれば:
public ActionResult Index(string mainnav, string subnav)
{
return View(mainnav | subnav);
}
HTMLビューでは、View以降を使用できます
<%=Model %>