2017-05-21 9 views
0

私はC#の初心者です。フォームをサーバーにポストバックすると、モデルにshow null値が設定されます。私は何をすべきかわからないモデルはmvcのポストバックでnullを示します

コントローラコード

[HttpPost] 
[ValidateAntiForgeryToken] 
[Authorize(Roles = "administrator")] 
public ActionResult ChangeUserDetail(ChangeUserDataModel model) 
{ 
    // .... 
} 

モデルのコード

public class ChangeUserDataModel 
{ 
    [Display(Name = "User Name")] 
    public string UserName { get; set; } 

    [Display(Name = "Update Field")] 
    public string Change { get; set; } 

    [Required] 
    public string Value { get; set; } 
} 

コードの表示

using (Html.BeginForm("ChangeUserDetail", "Home", FormMethod.Post) 
{ 
    var model2 = new Webrims.Models.AdminViewModel.ChangeUserDataModel(); 
    <div class="form-group"> 
     @Html.LabelFor(m => model2.UserName) 
     <div class="col-md-8"> 
      @Html.DropDownListFor(m => model2.UserName, new 
       SelectList(ViewBag.UserNames, "Value", "Text") 
     </div> 
    </div> 
    ..... 
} 
+0

)( 'VARのMODEL2 =新しいWebrims.Models.AdminViewModel.ChangeUserDataModelを取り外し;'と '@ Html.LabelFor(M => m.UserName)を使用し'と '@ Html.DropDownListFor(M => M .UserName、new SelectList(ViewBag.UserNames、 "Value"、 "Text") ' - あなたの生成するhtmlを見てください - ' name'属性はあなたのモデルと関係がありません –

答えて

0

は、このコードを使用します視点では、動作するはずです。

@model Webrims.Models.AdminViewModel.ChangeUserDataModel 

using (Html.BeginForm("ChangeUserDetail", "Home", FormMethod.Post) 
    { 

     <div class="form-group"> 
     @Html.LabelFor(m => Model.UserName) 
     <div class="col-md-8"> 
     @Html.DropDownListFor(m => Model.UserName, new 
     SelectList(ViewBag.UserNames, "Value", "Text") 
     </div> 
     </div> 
} 
+0

同じページにいくつかのモデルがあります@ Model Webrims.Models.AdminViewModel.ChangeUserDataModelは別のエラーを返します –

+0

私は部分ビューメソッドを使用して同じページで複数のモデルを使用します –

+0

すべてのモデルをプロパティとして持つクラスを作成し、コントローラとしてモデルを押します。 –

2

私はトンと思いますが彼の線

var model2 = new Webrims.Models.AdminViewModel.ChangeUserDataModel(); 

は正しくありません。なぜここでモデルを開始する必要がありますか?

MVCアーキテクチャでは、ビューはコントローラから渡されたモデルを受け取ります。ビューは、後で使用するモデルを作成しません。だからあなたのGET要求では、あなたはepmtyモデルを渡す必要があり、POSTではこのモデルはPOSTフォームに含まれる値に基づいて作成されます。

コードの面では。予想は次のようなものです:

using (Html.BeginForm("ChangeUserDetail", "Home", FormMethod.Post) 
{  
    <div class="form-group"> 
     @Html.LabelFor(m => m.UserName) 
     <div class="col-md-8"> 
      @Html.DropDownListFor(m => m.UserName, new 
       SelectList(ViewBag.UserNames, "Value", "Text") 
     </div> 
    </div> 
} 

ビューはさらに、あなたのビューの上部にあなたがexpcetモデルのタイプを定義する必要があります

@model Webrims.Models.AdminViewModel.ChangeUserDataModel 
+0

私は同じページにいくつかのモデルを持っています –

関連する問題