2016-02-02 42 views
-1

我是Asp.net MVC和Razor的新手。我想使用Razor從數據庫顯示文本字段值。 我在控制器下面的代碼從Db獲取值並設置爲@ Html.TextBoxFor()Razor Asp.net

public ActionResult edit(int id) 
    { 

     using (var context = new pmcontext()) 
     { 



      var user_1 = from u in context.Users 
          where u.UserID==11 
          select u;   
       ViewBag.users = user_1.ToList(); 

      return View(); 

     } 
} 

鑑於我有

@model pm.Models.User 
@{ 
    ViewBag.Title = "edit"; 
} 

<h2>Update User</h2> 
@foreach (var user in ViewBag.Users) 
{ 
     <p><b> User Full Name: @user.fullname </b></p> 
     using (Html.BeginForm("Update", "Users", FormMethod.Post)) 
     { 


<div class="row"> 
    <div class="col-sm-6 col-xs-6">Name </div> 
    <div class="col-sm-6 col-xs-6">@Html.TextBoxFor(model => model.fullname, new { Class = "form-control", value=user.fullname }) </div> 
</div> 

     } 
    } 

我也曾嘗試以下的視圖來顯示文本框中user.fullname價值,但未能如願。

@Html.TextBoxFor(model => model.fullname, new { Class = "form-control", value="@user.fullname" }) 
+0

在控制器中的代碼生成User'的'的集合,但在該視圖的模型需要一個單個'用戶'。它不清楚你真的想在視圖中展示什麼。我懷疑你想'返回查看(user_1.FirstOrDefault();'(並刪除'ViewBag'屬性) –

回答

0

你的控制器應是:

using (var context = new pmcontext()) 
{ 
    //here how you can pass strongly typed model to View 
    ViewData.Model = context.Users.Where(x => x.UserID == 11).ToList(); 
    return View(); 
} 

然後在您查看更改模型:

@model IList<pm.Models.User> @*this is your actual model*@ 
@{ 
    ViewBag.Title = "edit"; 
} 

<h2>Update User</h2> 
@foreach (var user in Model) 
{ 
     <p><b> User Full Name: @user.fullname </b></p> 
     using (Html.BeginForm("Update", "Users", FormMethod.Post)) 
     { 


<div class="row"> 
    <div class="col-sm-6 col-xs-6">Name </div> 
    <div class="col-sm-6 col-xs-6">@Html.TextBoxFor(model => model.fullname, new { @class = "form-control"}) </div> 
</div> 

     } 
    } 

更改型號,逃避classhtmlAttrubutes和擺脫value=user.fullname你不不需要它,因爲TextBoxFor從您的模型屬性中獲取此值。

但是請注意,這種方式你會打破綁定,它不會讓你POST模型正確的方式。

的easies方式,使一切權利是使用for循環,而不是foreach

@for (int i = 0; i < Model.Count(); i++) 
{ 
     <p><b> User Full Name: @Model[i].fullname </b></p> 
     using (Html.BeginForm("Update", "Users", FormMethod.Post)) 
     { 


<div class="row"> 
    <div class="col-sm-6 col-xs-6">Name </div> 
    <div class="col-sm-6 col-xs-6">@Html.TextBoxFor(model => Model[i].fullname, new { @class = "form-control"}) </div> 
</div> 

     } 
    } 

這將產生正確的name屬性您input的和有約束力的將工作的權利上POST

+0

它不太可能會有更多的一個用戶'UserID == 11'所以我懷疑OP真的想要返回只有一個'用戶'到視圖(使用'.FirstOrDefault()') –

+0

@StephenMuecke可能,但我不明白爲什麼他需要在一個視圖循環? –

+0

@StephenMuecke無論如何,它將工作甚至列表只有一個元素=) –

0

在控制器

public ActionResult edit(int id) 
    { 

     using (var context = new pmcontext()) 
     { 

      List<User> user_1= context.Users.where(x=>x.UserID==1).ToList(); 

      return View(user_1); 

     } 
} 
+1

'user_1'是一個'IEnumerable '的好處,所以這會拋出一個異常(視圖需要一個'User') –

-1

公共的ActionResult編輯(INT ID) {

 using (var context = new pmcontext()) 
     { 



      var user_1 = (from u in context.Users 
         where u.UserID == 11 
         select u).ToList(); 
      ViewBag.users = user_1; 
      //make your Model type class object 
      User model = new User(); 
      model.fullname = user_1.fullname; 

      ///Pass your Model type class object On View. 
      return View(model); 

     } 


    } 
+0

'user_1' 'IEnumerable '它不包含'fullname'屬性,所以'model.fullname = user_1.fullname;'拋出一個異常 –

+0

@ model.fullname = @ user.fullname試試它對你爲每個循環提供剃鬚刀頁面。 –

相關問題