MVC 更新部分字段
來源:程序員人生 發布時間:2014-11-10 08:02:00 閱讀次數:2624次
<1>首先是在項目中添加1個ADO.NET實體數據模型
,選擇MemberInfo表 他會自動在模型里面生成1個MemberInfo的類,也會生成1個對應的實體類DataBaseEntities。用的時候只有用模型里的MemberInfo類和DataBaseEntities就行了。 不需再額外添加MemberInfo類了 【注意:這個DataBaseEntities 是你的http://www.vxbq.cn/db/名字+Entities】
<1>
MemeberCenter控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace bigtree.Controllers
{
public class MemberCenterController : Controller
{
bigTreeEntities db = new bigTreeEntities();
public ActionResult Index(int id)
{
ViewData["uid"] = id;
return View();
}
/// <summary>
/// 從實體中查詢出1條數據出來,然后將這條數據保存到ViewData.Model中 。這樣在Info視圖里就能夠根據Model來取數據了
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public ActionResult Info(int id)
{
ViewData["uid"] = id;
//var queryUserInfo = from d in db.MemberInfo
// where d.id == id
// select d;
//ViewData.Model = queryUserInfo.Single();
var queryUserInfo = db.MemberInfo.Single(x => x.id == id);
var data= MemberDetail.ConvertToViewModel(queryUserInfo);
ViewData.Model = data;
return View();
}
//[HttpPost]
//public ActionResult Info(bigtree.MemberInfo newsMemberInfo)
//{
// //db.MemberInfo.Attach(newsMemberInfo);
// //db.ObjectStateManager.ChangeObjectState(newsMemberInfo, System.Data.EntityState.Modified);
// //db.SaveChanges();
// bigtree.MemberInfo oldMemberInfo = db.MemberInfo.FirstOrDefault(x => x.id == newsMemberInfo.id);
// oldMemberInfo.mobile = newsMemberInfo.mobile;
// oldMemberInfo.name = newsMemberInfo.name;
// oldMemberInfo.email = newsMemberInfo.email;
// oldMemberInfo.userName = newsMemberInfo.userName;
// UpdateModel<bigtree.MemberInfo>(oldMemberInfo);
// db.SaveChanges();
// //db.CreateObjectSet<bigtree.MemberInfo>().ApplyCurrentValues(newsMemberInfo);
// //db.SaveChanges();
// return View();
//}
/// <summary>
///
/// </summary>
/// <param name="info">這個info其實你更新的對象</param>
/// <returns></returns>
[HttpPost]
public ActionResult Info(MemberDetail info)
{
//從實體中查詢出1條數據(1個對象)
var queryUserInfo = db.MemberInfo.Single(x => x.id==info.Id);
//調用MemberDetail.ConvertToEntity方法對實體對象的字段進行更新。
var data = MemberDetail.ConvertToEntity(info, queryUserInfo);
//使用來自控制器確當前值提供程序的值更新指定的模型實例(data)
UpdateModel<bigtree.MemberInfo>(data);
//將所有更新保存到數據源并重置對象上下文中的更改跟蹤
db.SaveChanges();
//db.CreateObjectSet<bigtree.MemberInfo>().ApplyCurrentValues(newsMemberInfo);
//db.SaveChanges();
return View();
}
}
}
info視圖
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/MemberCenter.Master"
Inherits="System.Web.Mvc.ViewPage<bigtree.ViewModel.MemberDetail>"%>
<%@ Import Namespace="bigtree" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm()) {%>
<div class="rightCon">
<div class="nowTil">
<h3>
個人資料</h3>
</div>
<ul class="memForm">
<li>
<p class="setterTil">
手機:</p>
<div class="setterBd">
<%--<input type="text" class="setterInput fl" value=" <%: Model.mobile %>" readonly="">--%>
<%: Html.TextBoxFor(x => x.Mobile, new { @class = "setterInput fl" ,@readonly=""})%>
<div class="setterExplain">
(請填寫真實入住人姓名,每間房只填寫以為便可)</div>
</div>
</li>
<li>
<p class="setterTil">
姓名:</p>
<div class="setterBd">
<%--<input type="text" class="setterInput fl" value="張小凡" readonly="">--%>
<%: Html.TextBoxFor(x => x.Name, new { @class = "setterInput fl"})%>
</div>
</li>
<li>
<p class="setterTil">
郵箱:</p>
<div class="setterBd">
<%--<input type="text" class="setterInput fl">--%>
<%: Html.TextBoxFor(x => x.Email, new { @class = "setterInput fl" })%>
<div class="setterExplain">
未驗證</div>
</div>
</li>
<li>
<p class="setterTil">
昵稱:</p>
<div class="setterBd">
<%--<input type="text" class="setterInput fl">--%>
<%: Html.TextBoxFor(x=>x.UserName,new {@class="setterInput fl"}) %>
</div>
</li>
<li>
<p class="setterTil">
性別:</p>
<div class="setterBd">
<label class="sex">
男
</label>
<%--<input type="radio" name="sex">--%>
<%:Html.RadioButtonFor(x=>x.Gender,"1",new {@name="sex"}) %>
<label class="sex">
女
</label>
<%:Html.RadioButtonFor(x=>x.Gender,"0" ,new {@name="sex"}) %>
</div>
</li>
</ul>
<input type="submit" value="保存" class="saveBtn">
</div>
<% } %>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">
<script type="text/javascript">
$(function () {
$(".navList > :contains('個人資料')").addClass("cur");
})
</script>
</asp:Content>
ViewModel 模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace bigtree.ViewModel
{
public class MemberDetail
{
public int Id { get; set; }
public string Mobile { get; set; }
public string Name { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string Gender { get; set; }
/// <summary>
/// 將從實體(數據表)中查詢出來的對象轉換成ViewModel。其實也就是將從實體中查詢出來的對象的屬性字段,賦值給ViewModel。然后由ViewModel來將值展現在前端頁面。
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
public static MemberDetail ConvertToViewModel(bigtree.MemberInfo info)
{
MemberDetail memberDetail = new MemberDetail();
memberDetail.Mobile = info.mobile;//將實體的字段賦值給ViewModel對象的字段
memberDetail.Email = info.email;
memberDetail.Name = info.name;
memberDetail.UserName = info.userName;
memberDetail.Gender = info.sex;
memberDetail.Id = info.id;
return memberDetail; //返回1個ViewModel 字段
}
/// <summary>
/// 將ViewModel轉換成實體。首先用戶從實體中查詢出1條數據(這條數據就是參數bigtree.MemberInfo info),然后我要對這條數據進行更新。這個更新就是用戶在前端頁TextBox中輸入的數據(其實也就是給ViewModel對象的屬性賦值的進程)。然后將這個對象的所有屬性賦值給從實體中查詢出來的對象的對應屬性
/// </summary>
/// <param name="memberDetail"></param>
/// <param name="info"></param>
/// <returns></returns>
public static bigtree.MemberInfo ConvertToEntity(MemberDetail memberDetail, bigtree.MemberInfo info)
{
info.email = memberDetail.Email; //將用戶在頁面輸入的Email的值賦值給 實體bigtree.MemberInfo類的email字段,以到達更新實體類(其實這個實體類就是數據表)中的數據
info.mobile = memberDetail.Mobile;
info.id = memberDetail.Id;
info.name = memberDetail.Name;
info.sex = memberDetail.Gender;
info.userName = memberDetail.UserName;
return info; //返回1個更新后的實體對象
}
}
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈