更新数据库记录
我正在尝试使用C#MVC更新配置文件表中的现有记录。更新数据库记录
我需要制作2个单独的注册表格。
我已经完成了第一个工作,它按照计划工作,它使用基本信息在数据库中创建用户记录。
[HttpPost]
public ActionResult Register(Registration signingUp)
{
var db = new ShareRideDBEntities();
if (ModelState.IsValid)
{
var Data = db.tblProfiles.Create();
Data.Prof_Email = signingUp.Email;
Data.Prof_Password = signingUp.Password;
db.tblProfiles.Add(Data);
int Saved = db.SaveChanges();
if (Saved != 0)
{
Response.Write("Success.");
}
else
{
Response.Write("Error.");
}
}
if (ModelState.IsValid)
{
if (ValidateUser(signingUp.Email, signingUp.Password))
{
FormsAuthentication.SetAuthCookie(signingUp.Email, false);
return RedirectToAction("Index", "Members");
}
else
{
ModelState.AddModelError("", "");
}
}
return View();
}
我想现在要做的是添加到现有记录一些新的信息使用另一种形式。
如果他/她是男性或女性,表单会询问他的姓名,姓氏,电话号码和选项(带有单选按钮)。
如果您需要更多信息,请评论,我会尽快解决。
编辑:
我Model
public class Registration
{
[EmailAddress]
public string Email { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
}
我的第二个model
public class ServiceRegistration
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
}
我还没有在HttpPost
方法的第二登记完成,因为我不是当然如何去做。
编辑:
好了,所以我已经对我我MembersController.cs
控制器上有
我ServiceRegistration.cs
模型
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace ShareRide.Models.Service
{
public class ServiceRegistration
{
[Required]
public Guid UserID { get; set; }
[Required(AllowEmptyStrings= false, ErrorMessage="Necesary Field.")]
public string FirstName{ get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Necesary Field.")]
public string LastName{ get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Necesary Field.")]
public string Phone{ get; set; }
}
}
public ActionResult Registrationform()
{
return View();
}
[HttpGet]
public ActionResult Registrationform(Guid UserID)
{
var model = new ServiceRegistration { UserID = UserID };
return View(model);
}
[HttpPost]
public ActionResult Registrationform(ServiceRegistration model)
{
var db = new ShareRideDBEntities();
if (ModelState.IsValid)
{
var Data = db.tblProfiles.Create();
Data.PROF_UserID = model.UserID;
Data.PROF_FirstName = model.Home_Address;
Data.PROF_LastName = model.Work_Address;
Data.PROF_Phone = model.Travel_Days;
db.SaveChanges();
return RedirectToAction("Index", "Members");
}
return View(model);
}
现在回答一些变化基地我在上遇到错误0 Cannot implicitly convert type 'System.Guid' to 'int'
在我的数据库中PROF_UserID
是主键,并且是int
。
而且我评论了Data.PROF_UserID = model.UserID;
这样我就可以建立,但是当我尝试访问Registrationform
视图返回一个错误:
首先,你需要修改你的ServiceRegistration模式,以你的用户ID,这样我们就可以将其附加到我们的实体。我还为验证目的添加了数据注释,但如果您愿意,您可以选择忽略这些注释。
public class ServiceRegistration
{
[Required]
public int Id { get; set; }
[Required]
public String FirstName { get; set; }
[Required]
public String LastName { get; set; }
[Required]
public String Phone { get; set; }
}
接下来你需要两个动作。一个从GET请求提供表单,另一个从POST请求保存记录。
通知我们如何传递用户的ID通过
public ActionResult AddUserInfo(int id)
{
var model = new ServiceRegistration{ id = id }
return View(model);
}
林不知道如何使你的DbContext是寻找或添加用户,所以你需要添加这个自己
[HttpPost]
public ActionResult AddUserInfo(ServiceRegistration model)
{
var db = new ShareRideDBEntities();
if(ModelState.IsValid)
{
//Find your user in your db context using model.Id as the reference
//Add the User Data from the model
db.SaveChanges();
return RedirectToAction("Index", "Controller");
}
//Form isn't valid so return form will the validation errors
return View(model);
}
最后你视图应该命名为AddUserInfo,看起来应该是这样的
@model my.namespace.ServiceRegistration
@using(Html.BeginForm(“AddUserInfo”, “Controller”, HttpMethod.Post))
{
<!--Hide the id from the user-->
Html.HiddenFor(m => m.Id)
Html.TextboxFor(m => m.FirstName)
Html.TextboxFor(m => m.LastName)
Html.TextboxFor(m => m.Phone)
Html.ValidationSummary();
<input type=“submit” value=“Save” />
}
我刚刚写了这个在我的Mac的记事本应用程序中,因此可能会出现一些语法错误,所以我提前致歉。
我希望这会有所帮助。
如果将用户重定向到不同的视图页面,则需要使用TempData而不是ViewBag。这是一个粗略的代码示例。您可能需要对其进行修改以适应您的需求。
型号
public class Registration
{
[EmailAddress]
public string Email { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
public virtual ServiceRegistration ServiceRegistration { get; set; }
}
在您的通话HTTPPOST,在条件的ValidateUser声明
if (ValidateUser(signingUp.Email, signingUp.Password))
{
FormsAuthentication.SetAuthCookie(signingUp.Email, false);
TempData["Registration"] = signingUp;
return RedirectToAction("Index", "Members");
}
查看
@{
var tempRegistration = TempData["Registration"] as Registration
}
@Html.HiddenFor(model => model.Email, new { id = "email", value= tempRegistration})
我已经编辑好标题添加一行。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –
如果您使用JavaScript创建多页表单并一次性发送所有数据与您的动作呼叫可能更容易 –
@IsabelHM事情是,我被迫这样做因为第二种形式的目的是另一种服务包含在我们的网站中,仅适用于已经注册的用户。 –