View ASP.NET核心MVC应用程序:我想在提交和呈现相同数据后显示相同的视图,但有问题
我不熟悉ASP.NET核心MVC,但我确实有一些使用ASP.NET webforms的经验。我正在创建一个ASP.NET核心MVC项目以供实践,我有一个控制器,它具有View ASP.NET核心MVC应用程序:我想在提交和呈现相同数据后显示相同的视图,但有问题,view,asp.net-core-mvc,View,Asp.net Core Mvc,我不熟悉ASP.NET核心MVC,但我确实有一些使用ASP.NET webforms的经验。我正在创建一个ASP.NET核心MVC项目以供实践,我有一个控制器,它具有[http post]Create和http Get Create操作方法 当用户在输入数据后进入“创建”页面时,用户可以单击“提交”按钮,保存数据后,http post Create()的视图将呈现(重新加载同一视图),我试图显示用户在提交之前填写的数据,但数据未绑定到输入控件。我正在将同一个模型传递给要保存的视图。在调试期间,我
[http post]Create
和http Get Create
操作方法
当用户在输入数据后进入“创建”页面时,用户可以单击“提交”按钮,保存数据后,http post Create()的视图将呈现(重新加载同一视图),我试图显示用户在提交之前填写的数据,但数据未绑定到输入控件。我正在将同一个模型传递给要保存的视图。在调试期间,我能够在VisualStudio的“局部变量”窗口下看到预期值
我想了解我做错了什么,或者为了工作我应该做什么改变。如果我需要采取不同的方法,那么为什么我采取的方法(在下面的代码中提到)是不正确的
以下是注释中的代码和说明
[HttpGet]
public async Task<IActionResult> Create()
{
// I am creating a viewModel object because wanted to include the logic for List<users> for dropdown.
var createView = await _chloramine.ChloramineSaveViewModel();
return View(createView);
}
[HttpPost]
// At page submit this Action method is called and data is saved.
public async Task<IActionResult> Create(ChloramineLogEditSaveViewModel clEditSaveViewModel)
{
_chloramine.CreateChloramineLog(clEditSaveViewModel);
// After data is saved I am adding a user list to the model because I was getting Object null error.
clEditSaveViewModel.User = await _chloramine.GetUser();
// Passing the same model object which was received in order to show what was filled or selected by the user.
return View(clEditSaveViewModel);
}
[HttpGet]
公共异步任务创建()
{
//我正在创建一个viewModel对象,因为我希望包含下拉列表的逻辑。
var createView=wait_chloramine.ChloramineSaveViewModel();
返回视图(createView);
}
[HttpPost]
//在页面提交时,调用此操作方法并保存数据。
公共异步任务创建(ChloramineLogEditSaveViewModel cleditsaviewmodel)
{
_创建氯胺日志(clEditSaveViewModel);
//数据保存后,我将向模型中添加一个用户列表,因为我得到的是对象null错误。
clEditSaveViewModel.User=await_chloramine.GetUser();
//传递收到的相同模型对象,以显示用户填写或选择的内容。
返回视图(clEditSaveViewModel);
}
下面是创建视图html
@model EquipmentMVC.Models.ChloramineLogEditSaveViewModel
@{
ViewData["Title"] = "Create";
}
<hr />
<div>
<form asp-action="Create">
<div class="form-group row">
@foreach (var item in Model.User)
{
@Html.HiddenFor(model => item)
}
<label asp-for="TimeDue" class="col-sm-2 col-form-label control-label"></label>
<div class="col-sm-8">
<input asp-for="TimeDue" value="" class="form-control" />
</div>
</div>
<div class="form-group row">
<label asp-for="PostPrimaryCarbanTankTp1" class="col-sm-2 col-form-label"></label>
<div class="col-sm-8">
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="PostPrimaryCarbanTankTp1" />
</label>
</div>
</div>
</div>
<div class="form-group row">
<label asp-for="Comments" class="col-sm-2 col-form-label"></label>
<div class="col-sm-8">
<input asp-for="Comments" class="form-control" />
</div>
</div>
<div class="form-group row">
<label asp-for="IsCompleted" class="col-sm-2 col-form-label"></label>
<div class="col-sm-8">
<div class="form-check">
<input class="form-check-input" asp-for="IsCompleted" />
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Technician</label>
<div class="col-sm-8">
<select asp-for="Selected" asp-items=@(new SelectList(Model.User,"Id","Name"))>
<option value="">Select...</option>
</select>
@*<span asp-validation-for="Selected" class="text-danger"></span>*@
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">RN</label>
<div class="col-sm-8">
<select asp-for="RnSelected" asp-items=@(new SelectList(Model.User,"Id","Name"))>
<option value="">Select...</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label"></label>
<div class="col-sm-8">
<input type="submit" value="Create" class="btn btn-secondary" />
</div>
</div>
<div><span asp-validation-for="TimeDue" class="text-danger"></span></div>
<div><span asp-validation-for="Comments" class="text-danger"></span></div>
<div><span asp-validation-for="IsCompleted" class="text-danger"></span></div>
</form>
</div>
@model EquipmentMVC.Models.ChloramineLogEditSaveViewModel
@{
ViewData[“标题”]=“创建”;
}
@foreach(Model.User中的var项)
{
@Html.HiddenFor(model=>item)
}
技术员
选择。。。
@**@
注册护士
选择。。。
我测试了您的代码,发现它在我的项目中运行得非常好
除TimeDue
外,该字段未成功绑定,其余字段已成功绑定
我不知道你是否也有同样的问题。TimeDue
绑定不成功是因为您在视图中设置了值
请在视图中删除此字段中的值:
<input asp-for="TimeDue" class="form-control" />
然后在创建操作中:
[HttpPost]
public IActionResult Create(ChloramineLogEditSaveViewModel clEditSaveViewModel)
{
return View(clEditSaveViewModel);
}
结果:
编辑:
我的代码:
控制器:
public IActionResult Create()
{
var model = new ChloramineLogEditSaveViewModel
{
Id = 1,
Comments = "aaaa",
PostPrimaryCarbanTankTp1 = "fjsdgk",
TimeDue = "bbbbbb",
IsCompleted=true,
RnSelected="gggg",
Selected="sgs",
User=new List<User>
{
new User{
Id=1,
Name="aa"
},
new User
{
Id=2,
Name="bb"
}
}
};
return View(model);
}
[HttpPost]
public IActionResult Create(ChloramineLogEditSaveViewModel clEditSaveViewModel)
{
return View(clEditSaveViewModel);
}
public IActionResult Create()
{
var模型=新氯胺LogEditSaveViewModel
{
Id=1,
Comments=“aaaa”,
产后碳氮烷tp1=“fjsdgk”,
TimeDue=“bbbbbb”,
IsCompleted=true,
RnSelected=“gggg”,
Selected=“sgs”,
用户=新列表
{
新用户{
Id=1,
Name=“aa”
},
新用户
{
Id=2,
Name=“bb”
}
}
};
返回视图(模型);
}
[HttpPost]
公共IActionResult创建(氯胺日志编辑保存视图模型clEditSaveViewModel)
{
返回视图(clEditSaveViewModel);
}
视图:
@for(int i=0;i
谢谢殷秋,在您建议的更改之后,我看到了预期的结果。这两个问题的结合没有让值出现在表单上。我会给你我所有的代码,你可以看到我更新的答案。谢谢Yinqui,很抱歉我没有意识到我可以选择接受答案的复选标记。我已经把它标上了。我试图升级投票,我还不被允许。嗨@Faisal,关于这个案子有什么更新吗?是的,在你建议的更新之后,我运行了代码,它工作得很好。谢谢现在转到MVC中的Jquery网格。
public IActionResult Create()
{
var model = new ChloramineLogEditSaveViewModel
{
Id = 1,
Comments = "aaaa",
PostPrimaryCarbanTankTp1 = "fjsdgk",
TimeDue = "bbbbbb",
IsCompleted=true,
RnSelected="gggg",
Selected="sgs",
User=new List<User>
{
new User{
Id=1,
Name="aa"
},
new User
{
Id=2,
Name="bb"
}
}
};
return View(model);
}
[HttpPost]
public IActionResult Create(ChloramineLogEditSaveViewModel clEditSaveViewModel)
{
return View(clEditSaveViewModel);
}
<form asp-action="Create">
<div class="form-group row">
@for (int i = 0; i < Model.User.Count(); i++)
{
<input type="hidden" name="User[@i].Id" value=@Model.User[i].Id />
<input type="hidden" name="User[@i].Name" value=@Model.User[i].Name />
}
<label asp-for="TimeDue" class="col-sm-2 col-form-label control-label"></label>
<div class="col-sm-8">
<input asp-for="TimeDue" class="form-control" />
</div>
</div>
<div class="form-group row">
<label asp-for="PostPrimaryCarbanTankTp1" class="col-sm-2 col-form-label"></label>
<div class="col-sm-8">
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="PostPrimaryCarbanTankTp1" />
</label>
</div>
</div>
</div>
<div class="form-group row">
<label asp-for="Comments" class="col-sm-2 col-form-label"></label>
<div class="col-sm-8">
<input asp-for="Comments" class="form-control" />
</div>
</div>
<div class="form-group row">
<label asp-for="IsCompleted" class="col-sm-2 col-form-label"></label>
<div class="col-sm-8">
<div class="form-check">
<input class="form-check-input" asp-for="IsCompleted" />
</div>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Technician</label>
<div class="col-sm-8">
<select asp-for="Selected" asp-items=@(new SelectList(Model.User,"Id","Name"))>
<option value="">Select...</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">RN</label>
<div class="col-sm-8">
<select asp-for="RnSelected" asp-items=@(new SelectList(Model.User,"Id","Name"))>
<option value="">Select...</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label"></label>
<div class="col-sm-8">
<input type="submit" value="Create" class="btn btn-secondary" />
</div>
</div>
<div><span asp-validation-for="TimeDue" class="text-danger"></span></div>
<div><span asp-validation-for="Comments" class="text-danger"></span></div>
<div><span asp-validation-for="IsCompleted" class="text-danger"></span></div>
</form>