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
中的属性才会被发帖。非常感谢!