Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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# 为什么空模型返回到post方法?_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 为什么空模型返回到post方法?

C# 为什么空模型返回到post方法?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,好的,已经发布了一个类似的问题,但是我没有看到适用于这个场景的答案,或者更可能的是,我完全理解答案 基本上我有一个get ViewResult和Post ActionResult,get返回正确的模型,但是当提交时,模型返回的所有属性都是null? 如果用户在其他方法中使用了类似的代码,并且可以正常工作,那么有人能看到这个问题吗? 仍在学习,因此请解释任何答案,谢谢 [HttpGet] public ViewResult DeleteUser(string userna

好的,已经发布了一个类似的问题,但是我没有看到适用于这个场景的答案,或者更可能的是,我完全理解答案

基本上我有一个get ViewResult和Post ActionResult,get返回正确的模型,但是当提交时,模型返回的所有属性都是null? 如果用户在其他方法中使用了类似的代码,并且可以正常工作,那么有人能看到这个问题吗? 仍在学习,因此请解释任何答案,谢谢

         [HttpGet]
    public ViewResult DeleteUser(string username)
    {
        IQueryRunner<User> getUser = new NhQueryRunner<User>();
        User user = getUser.GetQueryResult(new GetNamedEntity<User>(username));

        ViewUserModel model = Mapper.Map<User, ViewUserModel>(user);

        return View("DeleteUser", model);
    }

     [HttpPost]
    public ActionResult DeleteUser(ViewUserModel model)
    {
     }
[HttpGet]
public ViewResult DeleteUser(字符串用户名)
{
IQueryRunner getUser=新的NhQueryRunner();
User User=getUser.GetQueryResult(新的GetNamedEntity(用户名));
ViewUserModel=Mapper.Map(用户);
返回视图(“删除用户”,模型);
}
[HttpPost]
公共操作结果删除用户(ViewUserModel模型)
{
}
看法

@使用(Html.BeginForm(“DeleteUser”、“Company”、FormMethod.Post))
{
是否确实要删除用户名-@Html.DisplayFor(m=>m.Name)
}

您得到的是一个空模型,因为表单中的模型属性没有
输入
控件。即使是
DisplayFor
也不会在
POST
中返回值。我建议这样做:

@Html.HiddenFor(m => m.Property1)
@Html.HiddenFor(m => m.Property2)
@Html.HiddenFor(m => m.Property3)

...

其中,
Property{n}
是模型上的属性。

您得到的是一个空模型,因为表单中没有模型上属性的
输入
控件。即使是
DisplayFor
也不会在
POST
中返回值。我建议这样做:

@Html.HiddenFor(m => m.Property1)
@Html.HiddenFor(m => m.Property2)
@Html.HiddenFor(m => m.Property3)

...

其中
属性{n}
是模型上的属性。

表单从其输入提交值。您没有名称等于模型属性名称的输入,因此提交的表单数据不包含这些值。其他(查询字符串、路由数据等)也没有对应于模型属性的值。因此,模型绑定器无法绑定值,并且您的模型的所有属性都等于
null
(它们是引用类型属性)

您可以按照@Michael的建议使用@Html.HiddenFor(m=>m.Name)`在表单中生成隐藏输入:

<input id="Name" type="hidden" value="username_value" name="Name">


现在,如果您检查
Request.Form
values集合,它将包含带有键
Name
username\u值的条目
FormValueProvider
提供对模型绑定器的此集合的访问。将成功绑定名为
的属性。

表单从其输入提交值。您没有名称等于模型属性名称的输入,因此提交的表单数据不包含这些值。其他(查询字符串、路由数据等)也没有对应于模型属性的值。因此,模型绑定器无法绑定值,并且您的模型的所有属性都等于
null
(它们是引用类型属性)

您可以按照@Michael的建议使用@Html.HiddenFor(m=>m.Name)`在表单中生成隐藏输入:

<input id="Name" type="hidden" value="username_value" name="Name">


现在,如果您检查
Request.Form
values集合,它将包含带有键
Name
username\u值的条目
FormValueProvider
提供对模型绑定器的此集合的访问。将成功绑定名为
名称为
的属性。

您的表单部分中需要有表单输入元素,以便浏览器可以发回服务器。更新代码并添加以下属性

   @using (Html.BeginForm("DeleteUser", "Company", FormMethod.Post))
{
<fieldset>
    Are you sure you want to delete Username - @Html.DisplayFor(m => m.Name)
    @Html.HiddenFor(x=>x.Name)
    <input type="submit" value="Remove User"/>
</fieldset>
}
@使用(Html.BeginForm(“DeleteUser”、“Company”、FormMethod.Post))
{
是否确实要删除用户名-@Html.DisplayFor(m=>m.Name)
@Html.HiddenFor(x=>x.Name)
}

您的表单部分需要有一个表单输入元素,以便浏览器可以发回服务器。更新代码并添加以下属性

   @using (Html.BeginForm("DeleteUser", "Company", FormMethod.Post))
{
<fieldset>
    Are you sure you want to delete Username - @Html.DisplayFor(m => m.Name)
    @Html.HiddenFor(x=>x.Name)
    <input type="submit" value="Remove User"/>
</fieldset>
}
@使用(Html.BeginForm(“DeleteUser”、“Company”、FormMethod.Post))
{
是否确实要删除用户名-@Html.DisplayFor(m=>m.Name)
@Html.HiddenFor(x=>x.Name)
}

这看起来像是
name
而不是
username
@YairNevet谢谢,在编写答案时只查看了Get方法参数,现在更新了如何检查请求。表单值集合?我想我也保留了原始的输入标记行?@mkell它在控制器操作中可用。您不需要手动验证它-我只是指出,若值将通过表单提交,那个么它应该出现在该集合中。Binder将自动查找该值@SergeyBerezovskiy,我很清楚,我在视图中将我的值列为@Html.HiddenFor(m=>m.FirstName)等。。添加您在上面编写的代码输入行?…我做错了什么,因为我仍然得到相同的错误?这似乎是
name
而不是
username
@YairNevet谢谢,在编写答案时只查看了Get方法参数,现在更新了如何检查请求。表单值集合?我想我也保留了原始的输入标记行?@mkell它在控制器操作中可用。您不需要手动验证它-我只是指出,若值将通过表单提交,那个么它应该出现在该集合中。Binder将自动查找该值@SergeyBerezovskiy,我很清楚,我在视图中将我的值列为@Html.HiddenFor(m=>m.FirstName)等。。加上你上面写的代码输入行?…我做错了什么,因为我仍然得到了同样的错误?谢谢Michael,我确信这是解决方案,但是我在到达post方法之前遇到了一个错误,“Value不能为null。Parameter name:key”(模型中没有列出“key”),我需要做更多的挖掘,但我原以为程序会在提交后立即到达post方法的断点?。。。。。干杯汉克·迈克尔,我相信这是解决办法,不过我之前犯了一个错误