Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET核心MVC CRUD操作。创建表单不';我不再工作了_Asp.net_Asp.net Mvc_Asp.net Core_C# 3.0_Razor Pages - Fatal编程技术网

ASP.NET核心MVC CRUD操作。创建表单不';我不再工作了

ASP.NET核心MVC CRUD操作。创建表单不';我不再工作了,asp.net,asp.net-mvc,asp.net-core,c#-3.0,razor-pages,Asp.net,Asp.net Mvc,Asp.net Core,C# 3.0,Razor Pages,我目前正在为网站进行CRUD操作。在所附图片上,您可以看到我使用创建表单有两个目的。1.创建用户,2编辑用户。我的查询做得很好,但当我添加一个隐藏id以获得某个用户进行编辑时。我不能再按CreateUser了,因为我在图1中传递了一段代码。(我选择的行) 但是当我删除这段代码时,我可以创建一个用户,但是当我试图编辑一个用户时,当我删除这段代码时,它只是编辑用户,然后用编辑过的内容创建一个新的用户。有人知道如何解决这个问题吗 p、 我制作了控制器的屏幕截图和出错的代码片段 亲切问候, 扫描电镜 [

我目前正在为网站进行CRUD操作。在所附图片上,您可以看到我使用创建表单有两个目的。1.创建用户,2编辑用户。我的查询做得很好,但当我添加一个隐藏id以获得某个用户进行编辑时。我不能再按CreateUser了,因为我在图1中传递了一段代码。(我选择的行)

但是当我删除这段代码时,我可以创建一个用户,但是当我试图编辑一个用户时,当我删除这段代码时,它只是编辑用户,然后用编辑过的内容创建一个新的用户。有人知道如何解决这个问题吗

p、 我制作了控制器的屏幕截图和出错的代码片段

亲切问候,

扫描电镜

[出错的代码][1][User controller][2][User 控制器][3][数据传输对象][4][创建或更新 查询/功能][5]

[1] :[2]: [3]: [4]: [5]:


根据您的屏幕截图,您正在从UI调用相同的操作方法,在这种情况下,您需要验证您的操作方法中的id,看看它是否有效,然后更新它,否则它将被添加。场景第一次加载的页面id将为空,第二次加载时,页面id将为空,并且可以用于编辑


希望这能解决您的问题。首先,您可以使用上面工具栏中的“{}”复制您的代码,这样别人测试您的代码会更方便

但是,当我试图编辑一个用户删除这段代码时,它只是编辑用户,然后用编辑过的内容创建一个新的用户

您可以检查数据库中传递的模型,如果id存在,则创建一个,如果不存在,则删除旧模型并创建新模型

以下是linq的演示,您可以检查逻辑并将我的代码修改为您的代码:

public async Task<IActionResult> ProcessCreate(UsersDto user)
    {
        if (!_context.UsersDtos.Any(x => x.Id == user.Id))  //if not exist, create one directly
        {
            _context.Add(user);
            await _context.SaveChangesAsync();
        }
        else {               //else, delete old one and create new one       
            var therow = _context.UsersDtos.Where(x => x.Id == user.Id).FirstOrDefault();
            _context.Remove(therow);
            _context.Add(user);
            await _context.SaveChangesAsync();
        }          
        return RedirectToAction("Index");
    }
public异步任务ProcessCreate(UsersDto-user)
{
如果(!\u context.UsersDtos.Any(x=>x.Id==user.Id))//如果不存在,直接创建一个
{
_添加(用户);
wait_context.SaveChangesAsync();
}
else{//else,删除旧的并创建新的
var therow=_context.UsersDtos.Where(x=>x.Id==user.Id).FirstOrDefault();
_上下文。删除(therow);
_添加(用户);
wait_context.SaveChangesAsync();
}          
返回操作(“索引”);
}
在Create.cshtml中,可以显示id:

<form method="post" asp-action="ProcessCreate">
<div class="form-group" hidden>
    <label asp-for="Id" class="control-label"></label>
    <input asp-for="Id" class="form-control" />
    <span asp-validation-for="Id" class="text-danger"></span>
</div>
<div class="form-group">
    <label asp-for="First_name" class="control-label"></label>
    <input asp-for="First_name" class="form-control" />
    <span asp-validation-for="First_name" class="text-danger"></span>
</div>
//.......
<div class="form-group">
    <input type="submit" value="CreateOrEdit" class="btn btn-primary" />
</div>

//.......
结果:


所以我需要更改控制器中的某些内容?@SemdeWilde yes我是否可以通过验证仅用于显示表单的创建操作方法上的id来解决此问题?@SemdeWilde是的,因为您使用相同的表单用于这两个目的。您有代码示例吗?我的帖子有任何问题吗?如果你有问题,请随时提问。如果它能帮助你,你也能,所以它能帮助更多的人。