2016-12-12 36 views
-1

在MVC視圖空我有這種形式型號是控制器的操作方法

@model SalesForceWeb.Models.UserViewModel 

@using (Html.BeginForm("Configure", "Home")) { 
    @Html.LabelFor(model => model.user.EmailAddress) 
    @Html.TextBoxFor(model => model.user.EmailAddress) 
    @Html.LabelFor(model => model.user.Password) 
    @Html.PasswordFor(model => model.user.Password) 
    @Html.LabelFor(model => model.user.SecurityToken) 
    @Html.TextBoxFor(model => model.user.SecurityToken) 
    <p><input type="submit" id="setupSalesforce" value="Save" /></p> 
} 

而且在我的控制器這裏是我的行動結果的方法。

[HttpPost] 
public ActionResult Configure(Models.SalesforceUserModel model) 
{ 
    model.UserID = new Guid(); 
    model.CreatedDate = DateTime.UtcNow; 
    // snip, save to database 

    return View(); 
} 

但是,參數模型爲空/它的字段爲空。

這裏是我錯誤地做這個模型

public class SalesforceUserModel 
{ 

    public int AccountEventID { get; set; } 
    public Guid UserID { get; set; } 

    [DisplayName("Email Address")] 
    public string EmailAddress { get; set; } 
    public string Password { get; set; } 
    [DisplayName("Security Token")] 
    public string SecurityToken { get; set; } 
    public DateTime CreatedDate { get; set; } 

} 

是誰?

+3

爲什麼在視圖頂部有一個不同的模型?那麼你期望被傳遞給你的HttpPost方法? – Max

回答

0

您當前的視圖代碼產生HTML標記像下面用於輸入

<input id="user_EmailAddress" name="user.EmailAddress" type="text" value=""> 

但是您的HttpPost操作方法的參數是SalesforceUserModel類型在其上EmailAddress的屬性是直接出現(未深能級)。因此,對於模型綁定工作,你應該產生類似這樣的標記

<input name="EmailAddress" type="text" value=""> 

要做到這一點,你可以明確地指定要用於輸入元素的名稱。

@Html.TextBoxFor(f => f.user.EmailAddress,new {NAME="EmailAddress"}) 

OR

您可以更新您的視圖模型是這些特性的平板瘦視圖模型。

相關問題