Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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 MVC5控制器操作方法参数null_C#_Asp.net_Asp.net Mvc_Razor_Asp.net Mvc 5 - Fatal编程技术网

C# ASP.NET MVC5控制器操作方法参数null

C# ASP.NET MVC5控制器操作方法参数null,c#,asp.net,asp.net-mvc,razor,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Razor,Asp.net Mvc 5,是否可以在@Html.EditorFor中修改发布到控制器操作的属性名称 我有一个视图,既显示对象列表,也显示一个表单,允许用户创建一个。如果可能的话,我只想在创建时回发新对象值,而不是整个viewmodel 视图的我的ViewModel结构如下所示: public class GenericIndexViewModel { public IEnumerable<GenericListViewModel> ExistingObjects { get; set; } p

是否可以在
@Html.EditorFor
中修改发布到控制器操作的属性名称

我有一个视图,既显示对象列表,也显示一个表单,允许用户创建一个。如果可能的话,我只想在创建时回发新对象值,而不是整个viewmodel

视图的我的ViewModel结构如下所示:

public class GenericIndexViewModel
{
    public IEnumerable<GenericListViewModel> ExistingObjects { get; set; }
    public GenericCreateViewModel NewObject { get; set;
}

public class GenericCreateViewModel
{
    public string PropertyA { get; set; }
    public string PropertyB { get; set; }
}
动作方法签名如下:

[HttpPost]
public ActionResult Index(GenericCreateViewModel model) { ... }
当我提交表单时,它成功地点击了操作方法,尽管
model
参数为
null

当我检查post数据时,我可以看到属性的前缀是
NewObject

NewObject.PropertyA=test1&NewObject.PropertyB=test2

如何防止前缀,或使操作方法将前缀属性识别为参数?

尝试将编辑器更改为

@Html.EditorFor(m => m.NewObject.PropertyA)
并将您的Post action更改为

[HttpPost]
public ActionResult Index(GenericIndexViewModel model) { ... }
然后访问
model.NewObject
以获取所需的
GenericCreateViewModel

或者您也可以尝试使用:

<div class="field-holder">
    <label>PropertyA</label>
    <input type="text" name="PropertyA" />
</div>

<div class="field-holder">
    <label>PropertyB</label>
    <input type="text" name="PropertyB" />
</div>
<div>
    <input type="submit" value="Save" name="command" />
</div>

这只是实现所需结果的一种方法。

尝试将编辑器更改为

@Html.EditorFor(m => m.NewObject.PropertyA)
并将您的Post action更改为

[HttpPost]
public ActionResult Index(GenericIndexViewModel model) { ... }
然后访问
model.NewObject
以获取所需的
GenericCreateViewModel

或者您也可以尝试使用:

<div class="field-holder">
    <label>PropertyA</label>
    <input type="text" name="PropertyA" />
</div>

<div class="field-holder">
    <label>PropertyB</label>
    <input type="text" name="PropertyB" />
</div>
<div>
    <input type="submit" value="Save" name="command" />
</div>

这只是实现所需结果的一种方法。

默认表单行为将将完整模型发布回控制器,因此解决此问题的简单方法是将post Index方法中的参数更改为
GenericIndexViewModel


如果您想保持c#方法的原样,您需要覆盖数据的格式化方式,并在
onsubmit
事件中自己发出post请求

默认表单行为会将完整模型发布回控制器,因此解决此问题的简单方法是将post Index方法中的参数更改为
GenericIndexViewModel


如果您想保持c#方法的原样,您需要覆盖数据的格式化方式,并在
onsubmit
事件中自己发出post请求

视图中的@model是什么?请根据要求显示视图的必要相关代码添加视图片段。
public ActionResult Index([Bind(Prefix=“NewObject”)]GenericCreateViewModel模型)
@StephenMuecke请添加您的评论作为答案,因为我相信这更准确地解决了所问的特定问题。您认为您的@model是什么?请根据要求显示viewAdded视图片段的必要相关代码。
public ActionResult Index([Bind(Prefix=“NewObject”)]GenericCreateViewModel模型)
@StephenMuecke请添加您的评论作为回答,因为我相信这更准确地解决了所问的具体问题。这篇文章不会退回整个
通用索引模型
,包括所有
现有对象
数据吗?测试过,没有,只有
BeginForm
中的属性才会被发布。非常感谢!这篇文章不会发回整个
GenericIndexViewModel
,包括所有
现有对象
数据吗?已测试,没有,只有
BeginForm
中的属性才会被发帖。非常感谢!