首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >.net mvc视图不返回post模型

.net mvc视图不返回post模型
EN

Stack Overflow用户
提问于 2016-04-22 19:06:21
回答 2查看 5.8K关注 0票数 2

在我开始之前,我想说的是,我没有发现任何类似的东西。

在我的解决方案中,我有一个模型,其中包含一些对象的列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ModelView
{
    public Owner owner = new Owner();
    public Tenant tnt = new Tenant();
}

在我看来,我把这个类称为模型,就是这样。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@model WebApp.Models.ModelView

<form name="export_form" action="Export" method="post">
    <table cellpadding="2" cellspacing="2" border="0">
        @if (Condition_1)
        { 
            <tr>
                <td>
                    <!-- ID -->
                </td>
                <td>
                    @Html.HiddenFor(model => model.owner.ID)
                </td>
            </tr>
            <tr>
                <td>
                    Name
                </td>
                <td>
                    @Html.EditorFor(model => model.owner.name)
                </td>
            </tr>
            <tr>
                <td>
                    Phone
                </td>
                <td>
                    @Html.CheckBoxFor(model => model.owner.is_Checked_Phone)
                </td>
            </tr>
        }
        else 
        {
            <tr>
                <td>
                    <!-- ID -->
                </td>
                <td>
                    @Html.HiddenFor(model => model.tnt.ID)
                </td>
            </tr>
            <tr>
                <td>
                    Name
                </td>
                <td>
                    @Html.EditorFor(model => model.tnt.name)
                </td>
            </tr>
            <tr>
                <td>
                    Adress
                </td>
                <td>
                    @Html.CheckBoxFor(model => model.tnt.is_Checked_Adress)
                </td>
            </tr>
        }
    </table>
    <input type="submit" name="SaveStuff" value="Save" />
    <input type="submit" name="ExportStuff" value="Export" />
</form>

在我的控制器中,我有一个类,它处理多个提交按钮,根据按钮名称的不同,它将重定向到方法。下面是SaveStuff方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [HttpPost]
    [SubmitButtonClass(Name = "SaveStuff")]
    public ActionResult Save_Definition(Owner owner, Tenant tnt) 
    {
        /*
          Stuff Here
        */
    }

这里的问题是,即使实体不是空的,我仍然会得到空值。有什么原因吗?不返回任何值。

更新

模式A

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public partial class Owner
{
    public long ID { get; set; }
    public bool is_Checked_Name { get; set; }
    public bool is_Checked_Phone { get; set; }
}

B型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public partial class Tenant
{
    public long ID{ get; set; }
    public bool is_Checked_Name { get; set; }
    public bool is_Checked_Adress { get; set; }
}

这些是使用EF自动生成的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-22 20:35:51

您的代码有多个问题。首先,视图中的模型是ModelView,生成以该模型属性名称为前缀的窗体控件,例如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="checkbox" name="owner.is_Checked_Phone" ... />

这意味着POST方法需要与视图中的模型匹配。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ActionResult Save_Definition(ModelView model)

下一个问题是,您的模型只有字段,没有{ get; set; }属性,因此DefaultModelBinder不能设置任何值。视图模型需要属性(如public Owner owner { get; set; } ),并且在将模型传递给视图之前在控制器中设置值,或者在ModelView的无参数构造函数中设置值。

但是,视图模型不应该包含数据模型的属性,而应该是只包含所需属性的平面结构。在你的情况下,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ModelView
{
    public long ID { get; set; }
    [Display(Name = "Name")]
    public bool IsNameSelected { get; set; }
    [Display(Name = "Phone")]
    public bool IsPhoneSelected { get; set; }
    [Display(Name = "Address")]
    public bool IsAddressSelected { get; set; }
    // additional property to define if the form is for an Owner or Tenant
    public bool IsOwner { get; set; }
}

在GET方法中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var model = new ModelView()
{
    IsOwner = true // or false
};
return View(model);

在视野中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@model ModelView
....
@using (Html.BeginForm("Save_Definition"))
{
    @Html.HiddenFor(m => m.ID)
    @Html.HiddenFor(m => m.IsOwner)
    @Html.CheckBoxFor(m => m.IsNameSelected )
    @Html.LabelFor(m => m.IsNameSelected )
    if (Model.IsOwner)
    {
        @Html.CheckBoxFor(m => m.IsPhoneSelected)
        @Html.LabelFor(m => m.IsPhoneSelected)
    }
    else
    {
        @Html.CheckBoxFor(m => m.IsAddressSelected)
        @Html.LabelFor(m => m.IsAddressSelected)
    }
    .... // submit buttons
}

而POST方法,您可以检查model.IsOwner的值,以确定您是否提交了一个OwnerTenant,并采取了适当的操作。

边注:

  1. 推荐您阅读What is ViewModel in MVC?
  2. <table>元素用于表格数据。不要将它用于布局。
  3. 您的视图具有<form action="Export" .. >,但是POST方法名为Save_Definition,因此不确定要将表单提交给哪个方法。
票数 0
EN

Stack Overflow用户

发布于 2018-09-06 08:42:24

如果post控制器正在更改原始模型数据,则需要发出一个ModelState.Remove("propertyname"),后面跟着model.propertyname = "new“,然后简单的返回视图(模型)将在您已经发布的视图上更新已更改的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36806187

复制
相关文章
ASP.NET MVC编程——视图
1Razon语法 使用@符号后接C#或VB.NET语句的方式。 基本规则 1)变量 @后直接变量即可 2)代码块 为使用表达式或多行代码,@后跟大括号将多行代码包括在大括号中 3)“+” 对于加号连接的两个字符串变量或属性,使用小括号将他们括起来 4)插入HTML或文字 每一行前面加上“@:” 5)使用注释 使用@*和*@将要注释的部分包起来 6)用@@在页面上显示@ @using 在一个View中引入此页所需程序集的命名空间。 还可以在web.config中配置命名空间,不过将对所有的View起作用。 <
甜橙很酸
2018/03/30
3.1K0
ASP.NET Core MVC 视图
布局用于提供各个页面所需的公共部分,如:菜单、页头、页尾等。在ASP.NET Core中默认的布局文件是位于/Views/Shared文件夹下的_Layout.cshtml文件:
雪飞鸿
2019/05/19
2.2K0
ASP.NET MVC 5 - 视图
在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML。 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所引入的Razor视图引擎(Razor view engine)。Razor视图模板文件使用.cshtml文件扩展名,并提供了一个优雅的方式来使用C#语言创建所要输出的HTML。用Razor编写一个视图模板文件时,将所需的字符和键盘敲击数量降到了最低,并实现了快速,流畅的编码工作流程。 当前在控制器类中的Inde
葡萄城控件
2018/01/10
3.3K0
ASP.NET MVC 5 - 视图
ASP.NET MVC学习笔记03视图
早在ASP.NET MVC 3就引入了Razor视图引擎( Razor view engine)。Razor视图模板文件使用.cshtml文件扩展名,并提供了一个优 雅的方式来使用C#语言创建所要输出的HTML。用Razor编写一个视图模板文件时,将 所需的字符和键盘敲击数量降到了最低,并实现了快速,流畅的编码工作流程。 ---- 控制器返回指定视图 当前在控制器类中的Index方法返回了一个硬编码的字符串。更改HelloController方法返回一个 View对象,如下面的示例代码: 1 2 3 4
李郑
2018/03/01
2.1K0
ASP.NET MVC学习笔记03视图
ASP.Net MVC视图间的跳转
1:同一控制器间视图跳转 发现一个贼坑的地方,比如添加Home控制器,然后在views的home文件夹里添加Index视图和Second视图,在Index视图里想要通过超链接跳转到Second视图,需要这样写:
全栈程序员站长
2022/09/15
1.6K0
ASP.Net MVC视图间的跳转
ASP.NET MVC4 View 指定视图
这个控制器操作没有指定视图的名称。当不指定视图名称时,操作方法返回的 ViewResult 对象将按照约定来确定视图,它会在目录 /View/ControllerName 下查找与action 名称相同的视图。这种情况下选择的视图是 /Views/Home/Index.cshtml。
2018/09/03
7860
ASP.NET MVC编程——模型
1 ViewModel 是一种专门提供给View使用的模型,使用ViewModel的理由是实体或领域模型所包含的属性比View使用的多或少,这种情况下实体或领域模型不适合View使用。 2模型绑定 默认模型绑定器 通过DefaultModelBinder解析客户端传来的数据,为控制器的操作参数列表赋值。 显示模型绑定 使用UpdateModel和TryUpdateModel显示绑定模型,不会检验未绑定字段。 使用UpdateModel方法绑定模型时,如果绑定失败就会抛异常,而TryUpdateModel不会
甜橙很酸
2018/03/30
2.4K0
ASP.NET Core 5.0 MVC中的视图分类及使用——布局视图、启动视图、导入视图、详细视图、分部视图
我们可以在这个页面,添加一些全局性的内容,比如全局变量等,然后在具体View页面使用这些变量值
明志德道
2023/10/21
4250
ASP.NET Core 5.0 MVC中的视图分类及使用——布局视图、启动视图、导入视图、详细视图、分部视图
ASP.NET MVC5高级编程——(2)MVC模式的视图
1 ,视图职责是向用户提供界面,当控制器针对被请求的URL执行完合适的逻辑后,就将要显示的内容委托给视图。
浩Coding
2019/07/02
2.9K0
ASP.NET MVC5高级编程——(2)MVC模式的视图
ASP.NET MVC (一、控制器与视图)
ASP.NET MVC是最简洁、最方便、最高效、最快速的小型网站开发的方法,本文可以让一个小白用最快速的方式学会网站开发。
红目香薰
2022/11/29
1.8K0
ASP.NET MVC (一、控制器与视图)
ASP.NET Core 5.0 MVC 视图组件的用法
视图组件与分部视图类似,但它们的功能更加强大。 视图组件不使用模型绑定,并且仅依赖调用时提供的数据。它也适用于 Razor 页。
明志德道
2023/10/21
2790
ASP.NET Core 5.0 MVC 视图组件的用法
ASP.NET MVC5高级编程——(2)MVC模式的视图与Razor引擎
1 ,视图职责是向用户提供界面,当控制器针对被请求的URL执行完合适的逻辑后,就将要显示的内容委托给视图。
浩Coding
2019/07/03
3.7K0
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径
创建区域扩展器,其实我并不需要多区域,我目前只需要达到一个区域中有多个文件夹进行存放我的视图.
HueiFeng
2020/04/08
8020
ASP.NET MVC5高级编程——(3)MVC模式的模型
前面两篇文章我们分别讲了MVC下的视图和控制器,这章我们要讲模型(model),这章由于涉及到基架的使用,还有对模型绑定后数据库相关知识,可能会 很抽象,慢慢来吧,↖(^ω^)↗!在这之前可以先看看老师上课提的几个问题,相信看完了,你就对MVC中的模型有了个初步的了解了!
浩Coding
2019/07/03
4.8K0
ASP.NET MVC学习笔记06编辑方法和编辑视图
上一篇中,说到了MVC生成的Index方法,和Details方法,现在来说一下自动生成的方法和视图,应该怎么的来进行编辑。 优化日期显示 在这之前,先对前面的代码进行优化,使得发布日期属性(Relea
李郑
2018/03/06
5K0
ASP.NET MVC学习笔记06编辑方法和编辑视图
ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/11/12
2.9K0
ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
本篇代码以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-06
KenTalk
2018/12/21
2.1K0
ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门
MVC3----分部视图
2,新建一个视图(新建视图的时候,在弹出框中选择创建为分部视图)Message.cshtml,把这个文件放在Views/Shared这个文件夹下(约定优先于配置)
py3study
2020/01/13
5140
SpringMVC返回数据到视图
在SpringMVC中有一个ModelAndView对象,如其名,Model代表模型,View代表视图,这个名字就很好地解释了该类的作用——它用来存储模型数据以及显示该数据的视图名称。在控制器中调用完模型层处理完用户的请求后,我们可以把结果数据存储在该对象的model属性中,把要返回的视图信息存储在该对象的view属性中,然后让把ModelAndView对象返回给SpringMVC框架。框架则会通过调用Spring配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据传递到指定的视图上,这样我们就可以在视图中获得结果数据并显示出来了。
端碗吹水
2020/09/23
1K0
SpringMVC返回数据到视图
ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
本篇代码基于以下代码进行调整:https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
KenTalk
2018/11/09
2.3K0
ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门

相似问题

在MVC中进行post时,视图不返回模型数据

110

MVC发送模型到视图而不返回视图(模型)

23

$.post不刷新视图MVC Asp.net

12

返回视图不返回- ASP.NET MVC

23

MVC POST未返回修改的视图模型

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文