我想创建一个链接到多个表的视图。根据我的理解,我需要创建一个View Model并将其链接到页面。
使用下面的
我收到了一些错误'PaymentViewModel'是一种类型,在给定的上下文中无效。
表达式树可能不包含动态操作(与第一个错误有关?)
我是MVC的新手 - 来自ASP ....感谢任何帮助
public class PaymentViewModel
{
public string playername { get; set; }
public DateTime dob { get; set; }
public string phone { get; set; }
public string email { get; set; }
public string clubname { get; set; }
public string productname { get; set; }
public decimal amount { get; set; }
public int transactionID { get; set; }
public bool approved { get; set; }
public string subtype { get; set; }
public DateTime subdate { get; set; }
}
控制器
我需要从空白视图开始,因为这是注册播放器的第一步,因此信息不在数据库中。
下面是我用来获取填充视图的代码。
public ActionResult Payment()
{
DateTime blank = Convert.ToDateTime("01-01-1900");
var prod = from p in db.Product
join c in db.Club on p.clubname equals c.clubname
where p.clubname == "Club1"
select new PaymentViewModel
{
productname = p.prodname,
clubname = c.clubname,
playername = c.add1,
dob = blank,
phone = c.phone,
email = c.email,
transactionID = 0,
amount = p.amount,
approved = Convert.ToBoolean("1"),
subtype = c.city,
subdate = blank
};
return View(prod);
}
查看
@S4C.BAL.PaymentViewModel;
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Player Name</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
<b class="control-label col-md-2" style="">Full Name</b>
<div class="col-md-10">
@Html.EditorFor(model => model.playername, new { htmlAttributes = new { autofocus = "autofocus", @maxlength = "25", @class = "form-control" } })
@Html.ValidationMessageFor(model => model.playername, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<br /><br />
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
</div>
}
<div>@Html.ActionLink("Back to List", "Index")</div>
@section Scripts {@Scripts.Render("~/bundles/jqueryval")}
答案 0 :(得分:1)
您无法在approved = Convert.ToBoolean("1")
中执行select
,因为整个投影将在数据库端进行,而且不知道Convert.ToBoolean()
是什么。您需要在视图模型中执行此操作:
public class PaymentViewModel {
// other properties ...
public string approved { get; set; }
public bool IsApproved {get {return this.approved == "1" }}
}
同时将视图中的第一行更改为:
@model S4C.BAL.PaymentViewModel
答案 1 :(得分:0)
不确定我是否理解正确,所以请告诉我这里是不是错了。
听起来您知道如何从数据库中获取一个充满数据的视图,并且您希望在没有填充数据的情况下获得空视图。要获得空视图请求,只返回没有模型的视图。
// Must request with /{Controller}/PaymentEmpty
Public ActionResult PaymentEmpty()
{
return View("Payment", new PaymentViewModel());
}
如果查看ASP MVC应用程序的默认模板,控制器包含索引,详细信息,创建,编辑和删除操作。以这种方式思考操作可以帮助构建您的请求。也许将Payment放入其自己的名为PaymentsController的控制器中,并让控制器的操作遵循默认模板。