2016-07-29 12 views
0

現在ログインしているユーザーを取得し、そのユーザーを作成ページにアクセスしたときにリスト内の選択したアイテムに自動的に移動させるにはドロップダウンリストが必要です。私は、ユーザが他のユーザのために作成することができないように、かみそりページでDDLを無効に設定します。現在ログインしているユーザーにDDLを自動入力する方法

私はいくつかのことを試しましたが、私は運がありませんでした。

// GET: TimeStamps/Create 
    [Authorize] 
    public ActionResult Create() 
    { 
     ViewBag.UserId = new SelectList(db.Users, "Id", "FullName"); 
     return View(); 
    } 

    // POST: TimeStamps/Create 
    [Authorize] 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "Id,UserId,ClockIn,ClockOut")] TimeStamps timeStamps) 
    { 
     if (ModelState.IsValid) 
     { 
      db.TimeStamps.Add(timeStamps); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.UserId = new SelectList(db.Users, "Id", "FullName", timeStamps.UserId); 
     return View(timeStamps); 
    } 
@Html.LabelFor(model => model.UserId, "User", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("UserId", null, "Select...", htmlAttributes: new {@class = "form-control"}) 
      @Html.DropDownListFor(m => m.UserId, (SelectList)ViewBag.MyList, "Please select", new { @class = "form-control" }) 
     </div> 

答えて

0

あなたは強く型付けされたビューモデルとDropDownListForヘルパーメソッドを使用することができます。

public class CreateVm 
{ 
    public IEnumerable<SelectListItem> Users {set;get;} 
    public int SelectedUserId {set;get;} 
    public DateTime ClockIn {set;get;} 
    public DateTimeClockout {set;get;} 
} 

とあなたのGETアクション、

public ActionResult Create() 
{ 
    var vm = new CreateVm(); 
    vm.Users= db.Users.Select(f=>new SelectListItem { Value=f.Id.ToString(), 
                Text=f.FullName}).ToList(); 
    vm.SelectedUserId= 1; // Set the value here 
    return View(vm); 
} 

に私はハードに選択される値1をコード化されました。それをあなたの現在のユーザーIDで置き換えます(私はそれをどのように格納しているのかわかりません)。

とあなたのビューで強くおHttpPostアクションで今、このビューモデル

@model CreateVm 
@using(Html.BeginForm()) 
{ 
    // Your other fields also goes here 
    @Html.DropDownListFor(s=>s.SelectedUserId,Model.Users) 
    <input type="submit" /> 
} 

に型付けされた、覚えてあなたが同じビューモデルを使用することができ

[HttpPost] 
public ActionResult Create(CreateVm model) 
{ 
    var e=new TimeStamp { UserId=model.SelectedUserId, 
         ClockIn=model.ClockIn, Clockout=model.Clockout }; 
    db.TimeStamps.Add(e); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 

} 

一つのことであり、ドロップダウンを無効にしても、ユーザーはSELECT要素の値を他の値に変更することができます。ですから、保存する前に、あなたのHttpPostアクションメソッドで再度値を設定することを強くお勧めします。

[HttpPost] 
public ActionResult Create(CreateVm model) 
{ 
    var e=new TimeStamp { ClockIn=model.ClockIn,Clockout=model.Clockout }; 
    e.UserId = 1; // Replace here current user id; 
    db.TimeStamps.Add(e); 
    db.SaveChanges(); 
    return RedirectToAction("Index");  
} 
関連する問題