更新数据库记录

时间:2014-07-09 19:58:13

标签: c# asp.net-mvc model-view-controller

我正在尝试使用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视图时,它会返回错误: View error

2 个答案:

答案 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})