2016-07-08 71 views
0

視圖模型看起來是這樣的:MVC HttpPost強類型型號空

public class AsmenysInfoViewModel2 
{ 
    public asmenys_info Asmenys_info { get; set; } 
    public List<miestai> Miestai { get; set; } 
    public string Test { get; set; } 
} 

而且還有兩個動作。獲取和發佈。

public ActionResult Index(long? id) 
    { 

     var model = new AsmenysInfoViewModel2(); 
     model.Test = "Test"; 
     model.Asmenys_info = BllFactory.DalFactory.AsmenysInfoDal.GetById(id.Value); 
     return View(model); 
    } 
    [HttpPost] 
    public ActionResult Index(AsmenysInfoViewModel2 asmenys_info) 
    { 
     var model = asmenys_info; 
     return View(model); 
    } 

而我的看法是這樣的:

@model MODELS.AsmenysInfoViewModel2 
@{ 
    ViewBag.Title = "Index"; 
} 
@using (Html.BeginForm("Index", "AsmenysInfo", FormMethod.Post)) 
{ 
    @Html.ValidationSummary() 
    @Html.TextBoxFor(m => m.Asmenys_info.adresas)  

    <input type="submit" value="Išsaugoti" /> 
} 

不要緊,如果我用EditorFor或TextBoxFor - 結果是一樣的。發佈時我的模型屬性「Asmenys_info」始終爲空。如果我的類AsmenysInfoViewModel2不包含asmenys_info類型的屬性,並將只包含「字符串,int等」(沒有強類型) - 它會工作。 我的問題是:

如何發佈視圖模型,其中強類型的屬性,張貼不會是null?

+0

嘗試改變'公衆的ActionResult指數(asmenys_info asmenys_info)'來'公ActionResult Index(AsmenysInfoViewModel2 asmenys_info)' –

+0

同樣的問題。我在這裏發佈錯誤的代碼。這就像你說的。我編輯我的帖子來糾正導致我問題的代碼。我認爲問題是,在發佈沒有asmenys_info類的實例,所以它不能設置m.Asmenys_info.adresas屬性。但我不知道如何解決它。 – user2179088

+0

根據我的經驗,複雜模型表單發佈是不可能的。儘管你可以通過在jquery中構建一個json對象然後發佈表單來實現。 –

回答

1

您的模型有一個名爲Asmenys_info的屬性,並且POST方法中的參數也被命名爲asmenys_infoDefaultModelBinder在內部讀取包含Asmenys_info值的表單數據的值,並嘗試將屬性Asmenys_info設置爲該值,但由於沒有從string到複雜對象的轉換而失敗。

更改參數比模型中的一個屬性的名字以外的其他任何東西的名稱,它將結合精細,例如

[HttpPost] 
public ActionResult Index(AsmenysInfoViewModel2 model) 
1

變化與在上述方法中的另一對象名稱

public ActionResult Index(AsmenysInfoViewModel2 asmenys_info) 

下面行中使用的任何其它名稱的對象,而不是asmenys_info

因爲當mvc框架使用對象映射模型時,在Asmenys_info和AsmenysInfoViewModel2類的Asmenys_info屬性中存在混淆。