2016-04-13 11 views
1

こんにちは私は3つのフィールドを持っています.3つのフィールドがドロップダウンしています。編集ボタンをクリックすると、これらのフィールドに値を渡したいと思います。それは値をドロップダウンフィールドに渡す必要があります。私の見解は、私は多くのドロップダウンを持っていますが、私は別のドロップダウンのために行うことを意味しますダウン一滴に値を渡す方法を知っていれば私の見解ではMVC4の編集モードで値を渡す方法は?

DropDown

の下に記載されています。

編集では、SQLで1つのビューを作成し、そのビューをアプリケーション内のEDMXファイルとして接続します。このビュー(テーブル)では、Visitorsフォームにあるすべてのフィールドがあります。そのビュー名はView_VisitorsFormです。

マイモデル(VisitorsViewModel)

public Nullable<System.DateTime> Date { get; set; } 
    public System.Guid VisitingID { get; set; } 
    public Nullable<System.Guid> EmployeeID { get; set; } 
    public string EmployeeName { get; set; } 
    public string Description { get; set; } 

私のコードの編集

 public ActionResult Edit(Guid ?id) 
     { 
      WafeERPNEWEntities db = new WafeERPNEWEntities(); 
     SelectList typelist = new SelectList(db.Employees.ToList(), "EmployeeID", "DisplayName", db.Employees); 
     ViewData["EmployeeName"] = typelist; 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     VisitorsViewModel ObjVisitorsviewModel = new VisitorsViewModel(); 
     View_VisitorsForm visit = db.View_VisitorsForm.Find(id); 
     visit.VisitingID = ObjVisitorsviewModel.VisitingID; 
     visit.VisitingDate = ObjVisitorsviewModel.Date; 
     visit.Description = ObjVisitorsviewModel.Description; 
       if (ObjVisitorsviewModel == null) 
     { 
      return HttpNotFound(); 
     } 

     return View(ObjVisitorsviewModel); 
    } 

私のコードの表示

 @Html.LabelFor(model => model.Date) 
     @Html.EditorFor(model => model.Date) 
     @Html.ValidationMessageFor(model => model.Date) 

     @Html.LabelFor(model => model.VisitingID) 
     @Html.EditorFor(model => model.VisitingID) 
     @Html.ValidationMessageFor(model => model.VisitingID) 

     @Html.LabelFor(model => model.EmployeeName) 
     @Html.DropDownList("EmployeeID", (IEnumerable<SelectListItem>)ViewData["EmployeeName"]) 
     @Html.ValidationMessageFor(model => model.EmployeeName) 

編集ボタンをクリックすると、この行に値が渡されます。

View_VisitorsForm visit = db.View_VisitorsForm.Find(id); 

また、訪問しています。訪問ID。しかし、それはviewmodelの値を取得していません.so値は空でview.All値は空ですVisitingID、説明、日付フィールドは空であり、Employeeドロップダウンでは、このフィールドに渡した値は表示されませんドロップダウンの最初の値を示します。この問題を解決する方法を教えてください。実際に私は私の問題を私のレベルごとに説明しようとしています。あなたが私の問題を理解していなかったり、誰かが私のフルコードを必要としたり、私は再び私のコードを更新する準備ができています。しかし、私は解決策が必要です。

アドバンスのおかげ..

+0

_andをDropDownListForヘルパーメソッドを使用します。それは私がこのfield_に渡された値が表示されませんドロップダウン?あなたはモデルに価値を渡していません! (あなたのコントローラーで 'EmployeeID'の値をどこで設定したのですか?) –

+0

正常に動作させることができましたか? – Maxime

答えて

0

使用:

@Html.DropDownListFor(model => model.EmployeeID,(IEnumerable<SelectListItem>)ViewData["EmployeeName"]) 

"DropDownListFor" という重要な部分。あなたは "DropDownList"を使用しています。

+0

Pantuofermoが動作しない – Susan

+0

これは正しい方法です。それでも正しい従業員が選択されていない場合は、モデルのEmployeeIDが選択リストのEmployee Listに存在し、そのEmployeeIDが同じEmployeeIDであることを確認する必要があります。 – pantuofermo

0

あなたは

あなたはSelectListのを追加する必要がありますDropDownListFor(...)

モデルの代わりにDropDownList(...)を使用している:

public SelectList Employees { get; set } 

あなたの編集

あなたが取得する必要があります従業員リストと

// Get employees list from the database 
var employees = db.Employee.Select(x => x.Id, x.Name).Tolist(); 

// Put the employees in a SelectList 
var selectList = new SelectList(employees .Select(x => new { value = x.Id, text = x.Name }), "value", "text");}).ToList(); 

// Pass the list to your ViewModel 
ObjVisitorsviewModel.Employees = selectList; 

ビュー

最後に、このためにあなたのDropDownListForラインを変更します:

@Html.DropDownListFor(model => model.EmployeeID, 
           model.Employees) 

DropDownList(...)を使用することにより、あなたのオブジェクトデータがドロップダウンにバインドされていないモデルにそれをddを。選択した値を手動で管理する必要があります。

+0

Maximeあなたはvar employeesList = GetEmployees()と言っています。これは、var employeeList = db.Employee.Tolist();という意味です。このような?? – Susan

+0

私は私の答えをより明確に編集しました。 :-) – Maxime

+0

ok maxime私は試してみましょう – Susan

0

DropDownListForヘルパーメソッドを使用します。

@Html.DropDownListFor(model => model.EmployeeID, 
            (IEnumerable<SelectListItem>)ViewData["EmployeeName"]) 

は、今すぐあなたのGETアクションで、あなたはあなたのビューモデルのEmployeeIDプロパティ値を設定する必要があります。

public ActionResult Edit(int id) 
{ 
    var objVisitorsviewModel = new VisitorsViewModel(); 
    // I am hard coding to 25. 
    // You may replace it with a valid Employee Id from your db table for the record 
    ObjVisitorsviewModel.EmployeeID= 25; 

    return View(objVisitorsviewModel); 
} 

よりクリーンなソリューションを使用すると、ドロップダウンオプションをレンダリングするために必要なデータを転送するためのViewDataを使用しないにあります。あなたは、単に(/編集を作成する)あなたのGETアクションで

public class VisitorsViewModel 
{ 
    public List<SelectListItem> Employees { set;get;} 
    public Guid? EmployeeID { get; set; } 
    // Your existing properties goes here 
} 

今すぐあなたのビューモデルに新しいプロパティを追加し、代わりのViewDataを内のデータを格納することで、より強く型付けされたコードを作ることができ、我々は、EMPにロードされますloyeesプロパティ。enter code here

public ActionResult Edit(int id) 
{ 
    var vm = new VisitorsViewModel(); 
    vm.Employees = db.Employees.Select(s=> new SelectListItem { 
         Value=s.EmployeId.ToString(), Text=s.DisplayName }).ToList(); 
    return View(vm); 
} 

そして、あなたのビューでは、我々は従業員の従業員プロパティで

@model VisitorsViewModel 
@using(Html.BeginForm()) 
{ 
    @Html.DropDownListFor(s=>s.EmployeeID,Model.Employees,"Select") 
} 
+0

ok私はShyjuを試してみましょう – Susan

+0

Shyju私はこのエラーをvm.Employees = db.Employees.Select(s => new SelectListItem { Value = s。 EmployeeId.ToString()、Text = s.DisplayName})。ToList();そして、エラーが以下に記載されています。System.NotSupportedException:LINQ to Entitiesは、メソッドのSystemを認識しません。String ToString() 'メソッドであり、このメソッドをストア式に変換することはできません。 – Susan

+0

'EmployeId'列のタイプは何ですか?それがGuidの場合、コードは正常に動作するはずです。私はそれを自分で確認しました。 LINQ式のGuidプロパティで 'ToString()'を呼び出すことができます。 – Shyju

関連する問題