Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
C# ASP.Net核心异常-无法为模型对象创建模型绑定器_C#_Asp.net Core_Asp.net Core Mvc_Model Binding - Fatal编程技术网

C# ASP.Net核心异常-无法为模型对象创建模型绑定器

C# ASP.Net核心异常-无法为模型对象创建模型绑定器,c#,asp.net-core,asp.net-core-mvc,model-binding,C#,Asp.net Core,Asp.net Core Mvc,Model Binding,我还是MVC新手,我正在努力解决一个问题,即表单提交给需要视图模型的控制器时默认绑定失败。我曾尝试将模型绑定属性[FromForm]添加到构造函数中,但没有成功,我已经开始阅读有关自定义绑定的内容,但在本例中,这感觉有些过分了。如果我需要发布完整的HTML,我可以这样做 我真的很感谢您的指导,非常感谢您的帮助?我甚至在努力调试和命中断点 InvalidOperationException:无法为类型为“XX.Models.ClientEditViewModel”的模型对象>创建模型绑定器 模型

我还是MVC新手,我正在努力解决一个问题,即表单提交给需要视图模型的控制器时默认绑定失败。我曾尝试将模型绑定属性[FromForm]添加到构造函数中,但没有成功,我已经开始阅读有关自定义绑定的内容,但在本例中,这感觉有些过分了。如果我需要发布完整的HTML,我可以这样做

我真的很感谢您的指导,非常感谢您的帮助?我甚至在努力调试和命中断点

InvalidOperationException:无法为类型为“XX.Models.ClientEditViewModel”的模型对象>创建模型绑定器

模型

public部分类ClientEditViewModel
{
公共客户端编辑视图模型(列表程序)
{
这个。程序=程序;
}
public int ClientId{get;set;}
公共字符串ClientName{get;set;}
公共列表程序{get;set;}
}
形式

@model XX.Models.ClientEditViewModel
控制器

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditClient(ClientEditViewModel clientedit)
{
if (ModelState.IsValid)
{
    Client client = await dbcontext.Client.SingleOrDefaultAsync(m => m.Id == clientedit.ClientId);
    try
    {
        client.Name = clientedit.ClientName;
        dbcontext.Client.Update(client);
        await dbcontext.SaveChangesAsync();
    }
    catch (Exception ex)
    {
        string error = ex.InnerException.ToString();
        if (!ClientExists(clientedit.ClientId))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    TempData["msg"] = "You have successfully edited " + clientedit.ClientName + ".";
    return RedirectToAction("Index");
}

return null;
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务EditClient(ClientEditViewModel clientedit)
{
if(ModelState.IsValid)
{
Client Client=await dbcontext.Client.SingleOrDefaultAsync(m=>m.Id==clientedit.ClientId);
尝试
{
client.Name=clientedit.ClientName;
dbcontext.Client.Update(客户端);
等待dbcontext.saveChangesSync();
}
捕获(例外情况除外)
{
字符串错误=ex.InnerException.ToString();
如果(!ClientExists(clientedit.ClientId))
{
返回NotFound();
}
其他的
{
投掷;
}
}
TempData[“msg”]=“您已成功编辑”+clientedit.ClientName+”;
返回操作(“索引”);
}
返回null;
}

默认绑定使用无参数构造函数,而您的模型具有需要自定义绑定的自定义构造函数。这里有一个类似的帖子


在您的情况下,程序有一个setter,因此我将完全删除自定义构造函数。

默认绑定使用无参数构造函数,而您的模型有一个需要自定义绑定的自定义构造函数。这里有一个类似的帖子


在您的情况下,程序有一个setter,因此我将完全删除自定义构造函数。

问题是重复的,因此答案是冗余的构造函数是问题所在,感谢您花时间回答。我的问题原来是重复的,但那是因为我没有搜索这些术语。你的回答很有帮助,我投了赞成票并加了分。谢谢,我很高兴能帮上忙。这是我提供的第一个答案!这个问题是重复的,所以答案是多余的构造函数就是问题所在,谢谢你花时间回答。我的问题原来是重复的,但那是因为我没有搜索这些术语。你的回答很有帮助,我投了赞成票并加了分。谢谢,我很高兴能帮上忙。这是我提供的第一个答案!
@model XX.Models.ClientEditViewModel
<form asp-action="EditClient" method="post">
      <div class="form-horizontal">
        <input type="hidden" asp-for="@Model.ClientId" />
        <div class="form-group">
            <label asp-for="@Model.ClientName" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="@Model.ClientName" class="form-control" />
                <span asp-validation-for="@Model.ClientName" class="text-danger" />
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Update" class="btn btn-default" />
            </div>
        </div>
    </div>
</form>
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditClient(ClientEditViewModel clientedit)
{
if (ModelState.IsValid)
{
    Client client = await dbcontext.Client.SingleOrDefaultAsync(m => m.Id == clientedit.ClientId);
    try
    {
        client.Name = clientedit.ClientName;
        dbcontext.Client.Update(client);
        await dbcontext.SaveChangesAsync();
    }
    catch (Exception ex)
    {
        string error = ex.InnerException.ToString();
        if (!ClientExists(clientedit.ClientId))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    TempData["msg"] = "You have successfully edited " + clientedit.ClientName + ".";
    return RedirectToAction("Index");
}

return null;
}