以空视图模型MVC开始

时间:2017-02-19 23:26:16

标签: c# asp.net-mvc

我想创建一个链接到多个表的视图。根据我的理解,我需要创建一个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")}

2 个答案:

答案 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的控制器中,并让控制器的操作遵循默认模板。