首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从Razor视图mvc4调用post编辑操作

从Razor视图mvc4调用post编辑操作
EN

Stack Overflow用户
提问于 2013-06-11 23:07:01
回答 2查看 5.6K关注 0票数 0

这个问题可能已经问过好几次了,但在我的情况下行不通,所以请容忍我。

我的控制器中有以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [HttpPost]
    public ActionResult Edit(Organization obj)
    {
        if (ModelState.IsValid)
        {
            OrgRepo.Update(obj);
            return RedirectToAction("Details");
        }
        else
            return View();
    }

    public ActionResult Edit(int id)
    {
        return View();
    }

我试图通过调用post编辑操作将数据更新到数据库中。为此,我调用编辑操作如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@foreach (var item in Model) {

var test =  item.PartyId;  

<tr id="@test">
    <td  class ="txt">
        <input type="text"class="txt" value="@Html.DisplayFor(modelItem => item.Caption)"/>

    </td>
    <td class ="txt">
        <input type="text"class="txt" value="@Html.DisplayFor(modelItem => item.NameInUse)"/>
    </td>
    <td class ="txt">
        <input type="text"class="txt" value="@Html.DisplayFor(modelItem => item.Description )"/>
   </td>
   <td>
       @using (Html.BeginForm())
        {
            @Html.ActionLink("Edit", "Edit", "Org", null, new { @obj = item })
        }
    </td>
</tr>

但是,当我单击编辑时,我得到了异常:参数字典包含一个空条目,用于非空类型'System.Int32‘的参数'id’,用于“System.Web.Mvc.ActionResult编辑(Int32)”方法在'Dwiza.Controllers.OrgController‘中。可选参数必须是引用类型、可空类型,或者声明为可选参数。参数名称:参数

我的问题:

  1. 我怎么才能解决这个问题?
  2. 为什么它得到编辑动作是被调用而不是后编辑?
  3. 如果您可以建议更好的方法来通过jQuery或ajax或其他任何其他方法调用调用之间的编辑操作,那么有什么更好的方法呢?
EN

回答 2

Stack Overflow用户

发布于 2013-06-12 00:03:50

@Html.ActionLink生成一个只能用于调用GET的标记。更改为提交按钮,以获得一个帖子。

通常使用一个Edit,您只是在编辑一个sinble模型,而不是在页面上编辑一个集合,但是按照您所拥有的,将cshtml更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@model ICollection<Organization>

<table>
@foreach (var item in Model)
{
    using (Html.BeginForm())
    {
        var test = item.PartyId;

    <tr id="@test">
        <td class="txt">
            <input type="text" name="Caption" class="txt" value="@item.Caption"/>
        </td>
        <td class="txt">
            <input type="text" name="NameInUse" class="txt" value="@item.NameInUse"/>
        </td>
        <td class="txt">
            <input type="text" name="Description" class="txt" value="@item.Description" />
        </td>
        <td>
            <input type="hidden" name="PartyId" value="@item.PartyId"/>
            <button type="submit">Edit</button>
        </td>
    </tr>
    }
}
</table>

现在,每个表行都被一个表单包装,这意味着submit按钮将发布该数据。输入上的name属性将导致MVC模型绑定器正确地将发布的值绑定到模型。

这个隐藏在末尾的输入将确保您的PartyId值被回发。事实上,它是int (而不是可空的),这给您的初始代码带来了异常,我认为。

HTH

编辑

添加控制器代码(注-我仍然认为这有点/很多奇怪,因为您应该只编辑一个Organisation.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ActionResult Edit(int id)
{
    // get your organisations from your orgRepo...  I'm mocking that out.
    var orgs = new List<Organization> { new Organization { PartyId = 1, Description = "Org 1", Caption = "Caption 1", NameInUse = "Name 1"},
                                        new Organization { PartyId = 2, Description = "Org 2", Caption = "Caption 2", NameInUse = "Name 2"}};
    return View(orgs);
}
票数 2
EN

Stack Overflow用户

发布于 2013-06-12 00:01:44

老天爷,那真是个烂摊子。您的表单中只有一个链接,该链接指向编辑操作,该操作将调用get,表单将永远不会回发。您想在表行中做表单吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@foreach (var item in Model) {

var test =  item.PartyId;  

<tr>
<td colspan ="4>
@using (Html.BeginForm("Edit", "Org", FormMethod.Post))
{
    @Html.HiddenFor(modelItem  => item.PartyId)
    <table>
        <tr  id="@test">
            <td  class ="txt">
                <input type="text"class="txt" value="@Html.DisplayFor(modelItem => item.Caption)"/>

            </td>
            <td class ="txt">
                <input type="text"class="txt" value="@Html.DisplayFor(modelItem => item.NameInUse)"/>
            </td>
            <td class ="txt">
                <input type="text"class="txt" value="@Html.DisplayFor(modelItem => item.Description )"/>
           </td>
           <td>
               <input type="submit" value="edit" />

            </td>

        </tr>
    </table>
}
</td>
</tr>   
}

该代码将在一行中进行编辑,但我只是猜测您发布的代码中的结构。

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

https://stackoverflow.com/questions/17059552

复制
相关文章
Spring启用缓存
Spring对缓存的支持类似于对事务的支持,Spring缓存的思想是在调用方法时,会把该方法的参数和返回结果作为一个键值对存放于缓存中,下次在调用该方法时直接从缓存返回结果。
Tim在路上
2020/08/04
6790
Java内存缓存-通过Google Guava创建缓存
Guava是Google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中。实际项目开发中经常将一些公共或者常用的数据缓存起来方便快速访问。
小码农薛尧
2019/08/27
2.8K0
Java内存缓存-通过Google Guava创建缓存
Java内存缓存-通过Map定制简单缓存
在程序中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快。通过缓存,可以高效地重用之前检索或计算的数据。
小码农薛尧
2019/08/27
3.6K1
Java内存缓存-通过Map定制简单缓存
java的IO技术中什么是I什么是O?
马克-to-win:很多老司机还搞不清什么是I什么是O。很简单,我有个土办法。以内存为单位,数据进内存叫In,出内存叫Out。读文件,是数据从硬盘进到内存,所以用in类型流来处理。
马克java社区
2021/05/06
1.5K0
java的IO技术中什么是I什么是O?
golang fmt(格式换 I O接口)
fmt 方法可以大致分为 print, scan两类, 根据基础方法可以构建特定方法。
copy_left
2019/08/21
9840
最短路怎么可能尽可能地长呢?
https://www.acwing.com/activity/content/59/
Piper蛋窝
2021/08/20
4220
实战SSM_O2O商铺_47【Redis缓存】清除缓存接口的开发
设计如下: 在接口层传入缓存key的前缀,通过匹配的方式将能匹配到该前缀的所有key均删除。
小小工匠
2021/08/17
3510
Caffeine缓存 最快缓存 内存缓存
Caffeine是在Guava Cache的基础上做一层封装,性能有明显提高,二者同属于内存级本地缓存。使用Caffeine后无需使用Guava Cache,从并发的角度来讲,Caffeine明显优于Guava,原因是使用了Java 8最新的StampedLock锁技术。
赛先生和泰先生
2022/01/21
3K0
Caffeine缓存 最快缓存 内存缓存
Java-Java I/O流解读之基于字节的I / O和字节流
编写简单的 I / O操作很简单,仅仅涉及到很少的类和方法。 但是编写高效,便携式I / O非常困难,特别是如果我们必须处理不同的字符集。 这就解释了为什么有这么多的I / O包(在JDK 1.7中有9个)!
小小工匠
2021/08/17
1.1K0
Java-Java I/O流解读之基于字符的I / O和字符流
Java内部将字符(字符类型)存储在16位UCS-2字符集中。 但外部数据源/接收器可以将字符存储在其他字符集(例如US-ASCII,ISO-8859-x,UTF-8,UTF-16等等)中,固定长度为8位或16位, 位或以1到4字节的可变长度。 [读取“字符集和编码方案”]。
小小工匠
2021/08/17
1.8K0
Access、SQLite、HSQLDB、Sybase、MySQL、DB4O
一、Access     数据类型有些另类,而且密码太容易被攻破,性能不高,只能用在Windows程序上。     一般说来,单个表不超过10万少条记录为好,整个数据库不超过100M为好。ACCESS对数据库容量限制为2G,但超过100M后性能便 会有很大折扣。 二、HSQLDB     支持csv,配置分发容易,大数据量情况下性能不佳,这和sql执行效率无关,性能瓶颈在硬盘文件上,毕竟由于hsqldb没有在数 据文件存储上花时间,只是挂个csv。只能用于Java程序中。 三、firebird
用户1258909
2018/07/03
1.6K0
I-o-C 一篇概览
IoC(Inversion of Control )也被称之为 DI(dependency injection),名称侧重点略有不同。
WindWant
2023/05/09
1.1K0
I-o-C 一篇概览
在Google I / O 2018上观看Flutter
距离Google I / O 2018仅仅一周之遥,Flutter将在活动中展示风格,包括会话,代码,办公时间,交互式沙箱空间等等。
flyou
2019/08/06
1.8K0
在Google I / O 2018上观看Flutter
Android高效内存2:让图片占用尽可能少的内存
Android高效内存:让图片占用尽可能少的内存 一、让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336    小图:220 * 168 资源目录:xhdpi 小图的高宽都是
用户1155943
2018/01/04
1.7K0
Android高效内存2:让图片占用尽可能少的内存
启用 MySQL 和 MariaDB 查询缓存
很多新手都在使用 Memcached 或者 Redis 扩展来加速服务器数据库的运行性能,其实这些扩展对于小博客的服务器来说有时候是个负担和安全隐患的,具体可以参考【理智冷静的使用 Memcached 或者 Redis】一文,那么不使用优化扩展我们如何来提升 MySQL 或 MariaDB 数据库的运行性能呢?
明月登楼的博客
2019/05/15
2.7K0
JAVA线程-CPU缓存和内存屏障(四)
1.修改态(Modified),此cache行已被修改过(脏行),内容已不同于主存,为此cache专有。 2.专有态(Exclusive),此cache行内容同于主存,但不出现于其他cache中。 3.共享态(Shared),此cache行内容同于主存,但也出现于其他cache中。 4.无效态(Invalid),此cache行内容无效,需要从主内存重新加载。
IT架构圈
2020/03/28
1.8K0
实战SSM_O2O商铺_45【Redis缓存】配置Redis在Service层加入缓存
Redis性能十分优越,可以支持每秒十几万次的读/写操作,其性能远超数据库,并且支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,它还能支持一定的事务能力,这在高并发访问的场景下保证数据安全和一致性特别有用。
小小工匠
2021/08/17
4480
[BlogCore操作文档4] MemoryCache:内存缓存
采用最新的前后端完全分离技术【 ASP.NET Core Api 6.0 + Vue 2.x 】,并结合 IdentityServer4 ,可快速解决多客户端和多资源服务的统一认证与鉴权的问题,以及整合较为完善的数据权限控制。
老张的哲学
2023/08/23
2970
[BlogCore操作文档4] MemoryCache:内存缓存
go 内存缓存
很多时候我们为了缩短单次请求的时间,就需要去分析请求在哪一步耗时比较大,一般越靠近应用层优化效果越大,后端程序就是请求到达路由解析到返回结果这一步骤了。
花落花相惜
2021/11/25
8700
磁盘:最容易被忽略的性能洼地
在没有SSD硬盘之前,大家都会觉得我们的HDD硬盘很好用,什么5400转、7200转,广告都是棒棒的。直到有一天,SSD出现了,发现启动Windows的时候,居然可以秒开,这才幡然醒悟。因此,对于外行来说,磁盘I/O性能总是最容易被忽略的,精力会更集中在CPU上。但是对于内行人来说,大家都懂得,性能无非是CPU密集型和I/O密集型。磁盘I/O就是其中之一。那么到了移动时代,我们的存储芯片性能究竟怎样呢?在讨论这个问题之前,我们来看一个测试数据。
博文视点Broadview
2020/06/11
1.2K0
磁盘:最容易被忽略的性能洼地

相似问题

用内存映射I/O管理缓存

13

I/O内存映射

11

CPU缓存是否在I/O期间刷新到内存?

25

内存映射I/O如何区分内存和I/O传输?

11

快速SQLite I/O错误

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文