繁体   English   中英

更新数据库记录

[英]Update database record

我正在尝试使用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;上收到一个错误model.UserID; 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})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM