C# 为什么提交按钮将空数据从视图传递到控制器
我对C#和MVC非常陌生,这看起来可能是一个基本问题,但即使在彻底搜索了有类似问题的人之后,我也无法让它起作用 问题出在我在编辑视图上的提交按钮上,出于某种原因,它将空数据传递给Update方法,而不是表单输入数据 这是一种观点:C# 为什么提交按钮将空数据从视图传递到控制器,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我对C#和MVC非常陌生,这看起来可能是一个基本问题,但即使在彻底搜索了有类似问题的人之后,我也无法让它起作用 问题出在我在编辑视图上的提交按钮上,出于某种原因,它将空数据传递给Update方法,而不是表单输入数据 这是一种观点: <div class="row-fluid metro"> <div class="span2 offset4"> @using (Html.BeginForm("Update", "Realty", FormMethod.Post)
<div class="row-fluid metro">
<div class="span2 offset4">
@using (Html.BeginForm("Update", "Realty", FormMethod.Post))
{
@Html.HiddenFor(model => model.Address)
@Html.HiddenFor(model => model.Details)
@Html.HiddenFor(model => model.Manager)
@Html.ValidationSummary(true)
<div class="control-group">
<label class="control-label">Details</label>
<div class="controls">
@Html.EditorFor(model => model.Details)
@Html.ValidationMessageFor(model => model.Details)
</div>
</div>
<div class="control-group">
<label class="control-label">Address</label>
<div class="controls">
@Html.EditorFor(model => model.Address)
@Html.ValidationMessageFor(model => model.Address)
</div>
</div>
<div class="control-group">
<label class="control-label">Manager</label>
<div class="controls">
@Html.DropDownListFor(model => model.Manager.Id, Model.Managers)
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Guardar</button>
<a href="@Url.Action("Index", "Realty")"><button type="button" class="btn">Cancelar</button></a>
</div>
}
</div>
任何帮助都将不胜感激,提前感谢
public ActionResult Edit(int id)
{
List<SelectListItem> managers = new List<SelectListItem>();
var model = new RealtyViewModel();
if (id != 0)
{
var realty = this.realtyService.Get(id);
var mvm = new ManagerViewModel(realty.Manager.Id, realty.Manager.Name, realty.Manager.Age);
model = new RealtyViewModel(realty.Id, realty.Address, realty.Details, mvm);
}
foreach (var Manager in managerService.GetAll())
{
managers.Add(new SelectListItem { Value=Manager.Id.ToString(),Text=Manager.Name});
}
model.Managers = managers;
return this.View(model);
}
public ActionResult编辑(int-id)
{
列表管理器=新列表();
var模型=新的RealtyViewModel();
如果(id!=0)
{
var realty=this.realtyService.Get(id);
var mvm=新的ManagerViewModel(realty.Manager.Id、realty.Manager.Name、realty.Manager.Age);
模型=新的RealtyViewModel(realty.Id、realty.Address、realty.Details、mvm);
}
foreach(managerService.GetAll()中的var管理器)
{
添加(新的SelectListItem{Value=Manager.Id.ToString(),Text=Manager.Name});
}
模型。经理=经理;
返回此.View(model);
}
尝试从此表单中删除隐藏字段
<div class="row-fluid metro">
<div class="span2 offset4">
@using (Html.BeginForm("Update", "Realty", FormMethod.Post))
{
@Html.ValidationSummary(true)
<div class="control-group">
<label class="control-label">Details</label>
<div class="controls">
@Html.EditorFor(model => model.Details)
@Html.ValidationMessageFor(model => model.Details)
</div>
</div>
<div class="control-group">
<label class="control-label">Address</label>
<div class="controls">
@Html.EditorFor(model => model.Address)
@Html.ValidationMessageFor(model => model.Address)
</div>
</div>
<div class="control-group">
<label class="control-label">Manager</label>
<div class="controls">
@Html.DropDownListFor(model => model.Manager.Id, Model.Managers)
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Guardar</button>
<a href="@Url.Action("Index", "Realty")"><button type="button" class="btn">Cancelar</button></a>
</div>
}
</div>
@使用(Html.BeginForm(“更新”,“不动产”,FormMethod.Post))
{
@Html.ValidationSummary(true)
细节
@EditorFor(model=>model.Details)
@Html.ValidationMessageFor(model=>model.Details)
地址
@EditorFor(model=>model.Address)
@Html.ValidationMessageFor(model=>model.Address)
经理
@DropDownListFor(model=>model.Manager.Id,model.Managers)
瓜达尔
}
调试器是否进入您的操作方法?检查Request.Form如果您的表单值在这里传递?我输入该方法,但参数上的所有属性都为null。如何检查Request.Form?作为一个选项,您可以使var Form=Request.Form;在您的操作中,检查集合中是否存在视图中的值。或者您可以在调试时添加Watch Request.Form并查看此值。那么您查看的模型类型是什么?它应该是@model=RealtyViewModelform,检索到的是地址和详细信息字段,但由于某些原因,不是管理器字段。如何使值存储在模型中?或者至少经理字段中缺少了什么使其无法进入表单需求?我这样做了,情况仍然是一样的。
public ActionResult Edit(int id)
{
List<SelectListItem> managers = new List<SelectListItem>();
var model = new RealtyViewModel();
if (id != 0)
{
var realty = this.realtyService.Get(id);
var mvm = new ManagerViewModel(realty.Manager.Id, realty.Manager.Name, realty.Manager.Age);
model = new RealtyViewModel(realty.Id, realty.Address, realty.Details, mvm);
}
foreach (var Manager in managerService.GetAll())
{
managers.Add(new SelectListItem { Value=Manager.Id.ToString(),Text=Manager.Name});
}
model.Managers = managers;
return this.View(model);
}
<div class="row-fluid metro">
<div class="span2 offset4">
@using (Html.BeginForm("Update", "Realty", FormMethod.Post))
{
@Html.ValidationSummary(true)
<div class="control-group">
<label class="control-label">Details</label>
<div class="controls">
@Html.EditorFor(model => model.Details)
@Html.ValidationMessageFor(model => model.Details)
</div>
</div>
<div class="control-group">
<label class="control-label">Address</label>
<div class="controls">
@Html.EditorFor(model => model.Address)
@Html.ValidationMessageFor(model => model.Address)
</div>
</div>
<div class="control-group">
<label class="control-label">Manager</label>
<div class="controls">
@Html.DropDownListFor(model => model.Manager.Id, Model.Managers)
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Guardar</button>
<a href="@Url.Action("Index", "Realty")"><button type="button" class="btn">Cancelar</button></a>
</div>
}
</div>