0

我是 MVC 4 的新手(以及一般的 GUI),并且做了一两个教程,并获得了一些传统的 HTML 将它们集成到 MVC 新解决方案中。

我的问题 -

我在 Models 文件夹中有一个 MyModel.cs。我的 Views 文件夹中有 SignUp.cshtml(没有其他 HTML 帮助程序的静态传统 html。)我的 Controllers 文件夹中有 MyController.cs。

  1. 我添加了对模型的引用(@model XXX.XXX.MyModel)
  2. 在现有表单之前,我添加了@using (Html.BeginForm())...
  3. 我将其中一个文本字段转换为新方式:

    @Html.LabelFor(m => m.FirstName) @Html.TextBoxFor(m => m.FirstName)

怎么办?如何将表单详细信息传递给控制器​​?试图拥有

[HttpGet]
        public ActionResult Create()...

 [HttpPost]
        public ActionResult Create(MyModel model1)

但是在我提交表单后没有调用这些函数......我在这里错过了一些东西(可能在我对绑定的理解中)

4

3 回答 3

1

试试这个,

模型

 public class RegisterModel
    {
        public int ID { get; set; }


        [Required(ErrorMessage = "Name is required.")]
        public string Name { get; set; }

        [Required(ErrorMessage = "Phone is required.")]
        public string PhoneNo { get; set; }

        [Required(ErrorMessage = "Address is required.")]
        public string Address { get; set; }
}

看法

@model XXX.XXX.RegisterModel


  @using (Html.BeginForm("Create", "Test", FormMethod.Post, new { id = "FrmIndex" }))
        { 
           <div>

                @Html.LabelFor(m => m.Name)
                @Html.TextBoxFor(m => m.Name)
                @Html.ValidationMessageFor(m => m.Name)

            </div>
            <br />
            <div>
                @Html.LabelFor(m => m.Address)
                @Html.TextBoxFor(m => m.Address)
                @Html.ValidationMessageFor(m => m.Address)
            </div>
            <br />
            <div>
                @Html.LabelFor(m => m.PhoneNo)
                @Html.TextBoxFor(m => m.PhoneNo)
                @Html.ValidationMessageFor(m => m.PhoneNo)
              </div>
 <input type="submit" value="Save" style="float: left;" id="btnSave" title="btn" name="ButtonType" />
}

控制器

 [HttpGet]
     public ActionResult Create(RegisterModel model)
    {
         return View();
    }
     [HttpPost]
     public ActionResult Create(RegisterModel model)
    {
      if (model != null && ModelState.IsValid) // check to see if any users are missing required fields. if not...
        {
            if (model.ID != 0)
            {
                UpdateRegister(model);
            }
            else
            {

                InsertRegister(model);
            }

        }
        else
        {
            return View();
        }
    return RedirectToAction("Index");
    }
于 2013-09-16T12:38:21.853 回答
1

1)如果您没有使用HTML Helpers ,请确保View中每个输入控件的每个名称都与模型中的属性名称匹配,否则默认将无法在服务器中重新构建模型;ModelBinder

MyModel.cs:

public class MyModel
{
   public string Property1 {get; set;}
   public string Property2 {get; set;}
}

HTML:

<input type="text" name="Property1" id="Property1" />
<input type="text" name="Property2" id="Property2" />

2)您必须向Html.BeginForm提供动作和其他参数,看起来那是您的问题,表单找不到要发布的动作,所以:

@using(BeginForm("actionName", "controllerName", FormMethod /*POST or GET*/))
{
   //Forms controls here
}
于 2013-09-16T12:42:56.703 回答
0

您不需要第一次传递模型,因为它只是一个空结构,在视图中引用:

    [HttpGet]
     public ActionResult Create()
    {
         return View();
    }

     [HttpPost]
     public ActionResult Create(RegisterModel model)
    {
      if (model != null && ModelState.IsValid) // check to see if any users are missing required fields. if not...
        {
            if (model.ID != 0)
            {
                UpdateRegister(model);
            }
            else
            {

                InsertRegister(model);
            }

        }
        else
        {
            return View();
        }
    return RedirectToAction("Index");
}
于 2013-09-16T16:10:57.170 回答