我的主要观点是
@model IEnumerable<Ortund.Models.Reward>我试图允许用户在这个视图上做几件事情,而不必去导航。
具体来说,我希望用户能够执行以下操作:
我使用部分视图来实现这一点,因为我可以为每个部分设置一个新模型。
看起来是这样的:
/Home/Index
if (Request.Cookies["Ortund"] == null)
{
// render a login form
}
else
{
<p>@String.Format("Welcome, {0}!", Convert.ToString(Request.Cookies["Ortund"]["username"])) <a id="claim-link">Claim New</a> | <a id="redeem-link">Redeem</a></p>
@Html.Partial("_RewardsView")
<!-- Render the new claim and redemption views as well -->
<div class="claim-new">
@Html.Partial("_ClaimsView")
</div>
<div class="redemption">
@Html.Partial("_RedemptionView")
</div>_RewardsView
@model IEnumerable<Ortund.Models.Reward>
...._ClaimsView
@model Ortund.Models.Receipt
...._RedemptionView
@model IEnumerable<Ortund.Models.Reward>
....我知道视图模型是首选的方法,但是由于我还没有想出如何正确地使用视图模型,所以我将采用这种方法。
我在另一个项目上这样做过,但这次我遇到了一个错误,即视图所需的字典时间与所提供的时间不同(在这个特定的例子中,我们在收据和奖励之间出现了混淆)。
我不知道该怎么做,只是手动构建表单,不与模型关联,而是将其发布到正确的控制器上.
发布于 2015-08-18 15:51:32
如果你使用一个模型,但是像这样构建:
public class MainModel{
public fakeOneModel fakeModelOneView{get; set;}
public fakeTwomodel fakeModelTwoView{get; set;}
public fakeThreemodel fakeModelThreeView{get; set;}
}
public class fakeOneModel{
public string objectA1 {get; set;}
public string objectA2 {get; set;}
public string objectA3 {get; set;}
}
public class fakeTwoModel{
public string objectB1 {get; set;}
public string objectB2 {get; set;}
public string objectB3 {get; set;}
}
public class fakeThreeModel{
public string objectC1 {get; set;}
public string objectC2 {get; set;}
public string objectC3 {get; set;}
}然后,从您的视图中,您可以访问一个模型中的所有类,如:
@Html.LabelFor(m=>m.fakeModelOneView.objectA1 )
@Html.TextBoxFor(m=>m.fakeModelOneView.objectA1 )
@Html.LabelFor(m=>m.fakeModelTwoView.objectB1 )
@Html.TextBoxFor(m=>m.fakeModelTwoView.objectB1 )
@Html.LabelFor(m=>m.fakeModelThreeView.objectC1 )
@Html.TextBoxFor(m=>m.fakeModelThreeView.objectC1 )发布于 2015-08-18 17:38:07
默认情况下,调用@Html.Partial("PartialViewName")呈现的部分视图接受父视图的视图模型。
主页的模型应该包括将传递给部分视图的模型:
模型:
public class IndexModel
{
public Ortund.Models.Receipt Receipt { get; set; }
public IEnumerable<Ortund.Models.Reward> ClaimedRewards { get; set; }
public IEnumerable<Ortund.Models.Reward> EligibleRewards { get; set; }
}视图:
调用部分视图时,指定要传递给它的模型,如
@model IndexModel
@Html.Partial("_RewardsView", Model.ClaimedRewards)
@Html.Partial("_ClaimsView", Model.Receipt)
@Html.Partial("_RedemptionView", Model.EligibleRewards)在单个页面上有多个窗体是另一个问题。请参阅同一页面中的多个表单ASP.net MVC
发布于 2015-08-18 18:26:58
所以,简而言之:使用一个视图模型?
是的,基本上。有这么多次,视图模型将被简单地要求来实现您所需要的东西,所以您最好学会使用它们。
然而,在这种情况下,您可以坚持更长的时间,因为您也可以实现您想要的使用子操作。从本质上说,这看起来是这样的:
控制器
[ChildActionOnly]
public ActionResult Rewards()
{
// fetch rewards
return PartialView("_Rewards", rewards)
}视图
@Html.Action("Rewards")https://stackoverflow.com/questions/32076804
复制相似问题