【问题标题】:Passing data from view to controller MVC3将数据从视图传递到控制器 MVC3
【发布时间】:2014-07-02 17:28:17
【问题描述】:

我最近在ASP.Net 上看到了 MVC 教程。我试图创建一个类似的项目(MVC3 Razor),您可以在其中注册详细信息。但是,当我单击提交按钮时,参数 User 中所有属性的值始终为空。我无法弄清楚为什么数据没有从视图传递到控制器。

即使在 Create.cshtml 的教程中,他们也只是将提交按钮用作

<input type="submit" value="Create" />

MoviesController.cs中Create Action中的代码如下

[HttpPost]
        public ActionResult Create(Movie movie)
        {
            if (ModelState.IsValid)
            {
                db.Movies.Add(movie);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

            return View(movie);
        }

在本教程中,当我提交时,我在参数电影中获取表单数据。但是,在我的示例项目中,我将其设为空。我是 MVC 的新手,如果你能帮我解决这个问题,那就太好了。请在下面找到我的代码。

Register.cshtml - 创建此视图时,我选择了“创建强类型视图”选项,并将脚手架模板选项选择为“空”

@model MvcRegister.Models.User
@using (Html.BeginForm())
{
<div>
<div>Name</div><div>@Html.EditorFor(model => model.Name)</div>
<div>Email</div><div>@Html.EditorFor(model => model.Email)</div>
<div>Phone</div><div>@Html.EditorFor(model => model.Phone)</div>
<div><input type="submit" value="Register" /></div>
</div>
}

RegisterController.cs

public class RegisterController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Register()
        {
            return View();
        } 

        [HttpPost]
        public ActionResult Register(User user)
        {
            return RedirectToAction("Index");  
        }
    }

用户.cs

public class User
    {
        [Required]
        public string Name;

        [Required]
        public string Email;

        [Required]
        public string Phone;

    }

我的项目源代码可在http://www.filedropper.com/mvcregister 获得,示例电影项目可在 http://www.filedropper.com/mvcmovie 获得

【问题讨论】:

  • 你面临的问题是什么?
  • 使用@Html.TextBoxFor() 代替@Html.EditorFor()...
  • @kartikeya-khosla :我尝试使用 @Html.TextBoxFor() 它仍然无法正常工作。问题是,如果我在表单中输入详细信息并提交,这些详细信息不会传递给方法 Register(User user) 并且“user”的所有值都是 null。
  • 你的代码是正确的,肯定有其他问题...
  • @kartikeya-khosla :我在filedropper.com/mvcregister(我的项目)和filedropper.com/mvcmovie(示例项目)上传了代码

标签: asp.net-mvc-3


【解决方案1】:

如下更改您的用户类。你错过了 getter 和 setter。

public class User
{
    [Required]
    public string Name { get; set; }

    [Required]
    public string Email { get; set; }

    [Required]
    public string Phone { get; set; }

    public string IP { get; set; }

    public string Password { get; set; }
}

您还需要添加以下 java 脚本来进行验证工作。

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

谢谢!

【讨论】:

  • 奇怪。因为默认情况下,.Net 4.0 中的属性不应该有 get 和 set。我尝试了以下操作并分配了值。公共类 UserX { [必需] 公共字符串名称;并在注册方法 UserX user1 = new UserX(); user1.Name = 用户名;该值被分配给 user1.Name。反正。非常感谢您的帮助。代码现在可以工作了。
  • 之前您定义了字段而不是属性。请参阅成员设计指南 (msdn.microsoft.com/en-us/library/ms229059%28v=vs.110%29.aspx)。很高兴为您提供帮助,谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多