2017-02-19 61 views
0

我想創建一個鏈接到多個表的視圖。根據我的理解,我需要創建一個View Model並將其鏈接到頁面。開始與空視圖模型MVC

我得到以下

「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

你的視圖需要'@model S4C.BAL.PaymentViewModel'(但在你的'付款代碼()'方法,因爲查詢創建PaymentViewModel'的'集合拋出另一個異常,你傳遞一個到一個視圖期待單'PaymentViewModel' –

+0

謝謝斯蒂芬如何創建PaymentViewModel的一個空白實例 – Rob

+0

在您的控制器GET方法你可以使用'返回查看();?'(或更好,'返回查看(新PaymentViewModel()) ;') –

回答

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 
+0

謝謝,已更新,但這不是我所問的...我需要弄清楚如何獲得一個空的視圖模型,以便我可以添加一個新的記錄 – Rob

+0

@rob哦,只是做這個'返回查看(prod.Single())',所以它發送一個項目到你的視圖。如果你的查詢沒有返回任何內容,那麼可能會失敗。 – CodingYoshi

+0

@rob看到我的編輯改變你的第一行查看以及 – CodingYoshi

0

不知道如果我理解這也是正確的,請告訴我,如果我這裏錯了。

聽起來像是你知道如何填充從數據庫數據的視圖,你想不填充數據的空視圖。只需返回一個沒有模型的視圖就可以獲得一個空的視圖請求。

// Must request with /{Controller}/PaymentEmpty 
Public ActionResult PaymentEmpty() 
{ 
    return View("Payment", new PaymentViewModel()); 
} 

如果你看一下ASP MVC應用程序的默認模板控制器包含指數,細節,行動創建,編輯和刪除。以這種方式思考行動可以幫助您構建您的請求。可能會將付款放置到名爲PaymentsController的自己的控制器中,並讓控制器的操作遵循默認模板。