<% using (Html.BeginForm("DisplayCustomer","Customer",FormMethod.Post))
{ %>
Enter customer id :- <%= Html.TextBox("Id",Model)%> <br />
Enter customer code :- <%= Html.TextBox("CustomerCode",Model) %><br />
Enter customer Amount :- <%= Html.TextBox("Amount",Model) %><br />
<input type="submit" value="Submit customer data" />
<%} %>
使用Razor
@using (Html.BeginForm("DisplayResult", "DisplayCustomer", FormMethod.Post)) {
@Html.ValidationSummary(true);
@:Enter customer id :- @Html.TextBox("Id",Model)
@:Enter customer code :-@Html.TextBox("Code",Model)
@:Enter customer Amount :-@Html.TextBox("Amount",Model)
<input type="submit" value="Enter the value" />
}
编译器错误消息:CS1973:&#39; System.Web.Mvc.HtmlHelper&#39;没有适用的方法名称&#39; TextBox&#39;但似乎有一个名称的扩展方法。无法动态分派扩展方法。考虑转换动态参数或调用扩展方法而不使用扩展方法语法。
@using (Html.BeginForm("DisplayResult", "DisplayCustomer", FormMethod.Post)) {
@Html.ValidationSummary(true);
@:Enter customer id :- <input type="text" name="Id" />
@:Enter customer code :-<input type="text" name="Code" />
@:Enter customer Amount :-<input type="text" name="Amount" />
<input type="submit" value="Enter the value" />
}
这可以正常使用
我做错了什么。我正在尝试使用与第一部分中给出的代码相同的剃刀。第二部分是剃刀代码尝试,第三部分只使用表单时工作。我也想知道是否是错误发生的原因
修改: -
@:Enter customer id :- @Html.TextBox("Id")
@:Enter customer code :-@Html.TextBox("Code")
@:Enter customer Amount :-@Html.TextBox("Amount")
如果我不使用模型,那么一切都很完美
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;
namespace MvcApplication1.Controllers
{
public class DisplayCustomerController : Controller
{
//
// GET: /DisplayCustomer/
[HttpPost]
public ViewResult DisplayResult()
{
Customer objCustomer = new Customer();
objCustomer.Id = Convert.ToInt16(Request.Form["Id"].ToString()); //101;
objCustomer.Amount =Convert.ToDouble(Request.Form["Amount"].ToString());// 80.00;
objCustomer.Code = Request.Form["Code"].ToString();//"IE100";
return View("DisplayResult", objCustomer);
}
public ActionResult ShowForm()
{
return View("ShowForm");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcApplication1.Models
{
public class Customer
{
//private string Code;
// private int Id;
//private double Amount;
public String Code
{
get;
set;
}
public int Id
{
get;
set;
}
public double Amount
{
get;
set;
}
}
}
@{
ViewBag.Title = "ShowForm";
}
<h2>ShowForm</h2>
@using (Html.BeginForm("DisplayResult", "DisplayCustomer", FormMethod.Post)) {
@Html.ValidationSummary(true);
@:Enter customer id :- @Html.TextBox("Id")
@:Enter customer code :-@Html.TextBox("Code")
@:Enter customer Amount :-@Html.TextBox("Amount")
<input type="submit" value="Submit" />
}
答案 0 :(得分:7)
发生错误是因为您尚未在视图中声明模型。将视图修改为
@model MvcApplication1.Models.Customer // add this
@{
ViewBag.Title = "ShowForm";
}
....
请注意,如果您使用@model dynamic
但我建议您对代码进行一些更改。首先,始终使用视图模型,尤其是在编辑时(参考What is ViewModel in MVC?)。最好使用***For()
方法来生成控件,而当前使用@Html.TextBox("Id", Model)
意味着每个文本框都会显示&#34; MvcApplication1.Models.Customer&#34;而不是财产的价值。此外,使用LabelFor()
生成与您的控件相关联的标签,并包含ValidationMesageFor()
进行验证
public class CustomerVM
{
[Display(Name = "Customer Id")]
[Required(ErrorMesage = "Please enter the customer id")]
public int? Id { get; set; }
[Display(Name = "Customer Code")]
[Required(ErrorMesage = "Please enter the customer code")]
public string Code { get; set; }
[Display(Name = "Customer Amount")]
[Required(ErrorMesage = "Please enter the customer amount")]
public double? Amount { get; set; }
}
,视图将是
@model yourViewModelAssembly.CustomerVM
....
@using (Html.BeginForm("DisplayResult", "DisplayCustomer", FormMethod.Post))
{
@Html.AntiForgeryToken();
@Html.ValidationSummary(true);
@Html.LabelFor(m => m.Id)
@Html.TextBoxFor(m => m.Id)
@Html.ValidationMessageFor(m => m.Id)
@Html.LabelFor(m => m.Code)
@Html.TextBoxFor(m => m.Code)
@Html.ValidationMessageFor(m => m.Code)
....
}
附注:如果Id
属性是PK,那么它不应作为可编辑控件包含在视图中。
还不清楚为什么要提交不同的方法,并且在任何情况下你的POST方法都不对数据做任何事情(例如保存它)。它只是返回相同的数据,但返回到不同的视图。通常你的方法是
public ActionResult Create()
{
var model = new CustomerVM();
return View(model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CustomerVM model)
{
if (!ModelState.IsValid)
{
return View(model)
}
var customer = new Customer
{
Code = model.Code,
Amount = model.Amount
}
.... // save the Customer and redirect
}