View 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()的视图将呈现(重新加载同一视图),我试图显示用户在提交之前填写的数据,但数据未绑定到输入控件。我正在将同一个模型传递给要保存的视图。在调试期间,我

我不熟悉ASP.NET核心MVC,但我确实有一些使用ASP.NET webforms的经验。我正在创建一个ASP.NET核心MVC项目以供实践,我有一个控制器,它具有
[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>