Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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 MVC 4将模型从一个控制器传递到视图,并从视图传递到另一个控制器,而用户无法编辑所有字段_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc MVC 4将模型从一个控制器传递到视图,并从视图传递到另一个控制器,而用户无法编辑所有字段

Asp.net mvc MVC 4将模型从一个控制器传递到视图,并从视图传递到另一个控制器,而用户无法编辑所有字段,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我对MVC4有点陌生,我无法理解 "CustomViewMOdel" "CustomViewMOdel" "ControllerX" ----------------> "VIEW" -----------------> "ControllerY" 我的问题是,我想将我的customviewmodel传递给view(它工作得很好!)。在视图中,我向用户显示了一些模型的字段(这也可以正常工作)。但现在我希望用户,更改模型字段中的一个字段,然后

我对MVC4有点陌生,我无法理解

              "CustomViewMOdel"        "CustomViewMOdel"
"ControllerX" ----------------> "VIEW" -----------------> "ControllerY"
我的问题是,我想将我的customviewmodel传递给view(它工作得很好!)。在视图中,我向用户显示了一些模型的字段(这也可以正常工作)。但现在我希望用户,更改模型字段中的一个字段,然后将整个模型传递给控制器X(填充所有字段,包括用户能够更改的字段和刚刚显示的其他字段)


有人能给出一个非常简单的代码示例来说明如何执行此操作吗?

您只需创建一个表单,将其发布到另一个控制器:

控制器X:

public ActionResult DoSomething()
{
     return View(new CustomVM());
}
维瓦


您可以在表单上使用
@Html.HiddenFor(o=>o.Property)
。 这不会在其上显示属性。 但是高级用户可以通过开发控制台更改属性。因此,您应该检查控制器中的所有更改

public ActionResult DoSomethingElse(CustomViewModel vm)
{
    // do something else
}
例如:

@Html.HiddenFor(o => o.Id)
@Html.HiddenFor(o => o.Name)
@Html.EditorFor(o => o.Description)

<input type="submit" value="OK" />
@Html.HiddenFor(o=>o.Id)
@HiddenFor(o=>o.Name)
@EditorFor(o=>o.Description)

这只允许用户更改描述,但FormCollection上仍有“id”和“name”。

我有很多字段要显示给用户,但不允许更改,我使用DisplayFor()。对于可变字段“DropdownProperty”,我使用dropdownlistFor()。当我在controllerY中调试时,我可以看到,在我的CustomViewModel中只有“DropdownProperty”值,所有其他值都为null。我尝试使用html.hidden for,但它不起作用,我的CostuomViewModel属性(在“DropDownProperty”旁边)仍然为空。如果您还想发布这些属性,则需要
html.HiddenFor
在控制器Y中,它仍然会显示CustomViewModel属性值为空,除了该属性之外,用户已更改的内容。您的CustomViewModel中应该有一个默认构造函数,如“public CustomViewModel(){}”,以自动接受从视图到控制器的模型,或者您可以尝试接受ControllerY中的“FormCollection collection”属性并检查此属性。例子:
@Html.HiddenFor(o => o.Id)
@Html.HiddenFor(o => o.Name)
@Html.EditorFor(o => o.Description)

<input type="submit" value="OK" />