我正在尝试使用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
方法,因为我不知道该怎么做。
编辑:
好的,所以我根据我得到的答案做了一些改动
我的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; }
}
}
在我的MembersController.cs
控制器上
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);
}
现在我在model.UserID;
Cannot implicitly convert type 'System.Guid' to 'int'
在我的数据库PROF_UserID
上是主键,是int
。
我还评论了Data.PROF_UserID = model.UserID;
,因此我可以构建,但是当我尝试访问Registrationform
视图时,它会返回错误:
答案 0 :(得分:1)
首先,您需要修改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的记事本应用程序上写了这个,所以可能有一些语法错误,所以我提前道歉。
我希望这会有所帮助。
答案 1 :(得分:0)
如果将用户重定向到其他视图页面,则需要使用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})