【问题标题】:ASP.NET MVC Post method : Model properties does not persit the valueASP.NET MVC Post 方法:模型属性不保留值
【发布时间】:2020-09-30 03:22:21
【问题描述】:

我有 2 个 ASP.NET MVC 操作方法,我通过传递和加载一些初始数据来调用第一个方法,然后我从 UI 中获取一些额外的详细信息并调用第二个操作方法(Post 来自.cshtml 的操作方法)。我从第一次调用中收到的数据在 post 方法中丢失了。谁能帮助我在这里做错了什么或遗漏了什么?

动作方法:

[Route("setprofile")]
public ActionResult SetProfile(string id)
{
    ProfileData data = new ProfileData();
    //do something
    data.name= getData(id);
    return this.View(data);
}

[Route("setprofile")]
[HttpPost]
public ActionResult SetProfile(ProfileData data)
{
    // Here I'm not missing the data.name field value
}

查看.cshtml文件:

<div class="panel-body">
@using (Html.BeginForm("SetProfile", "Home", FormMethod.Post))
{
<div>
    <h3> Name: @(this.Model.name)</h3>
</div>
<h3>
    Comments:@Html.TextBoxFor(m => m.comments)
</h3>
}

我得到了 cmets 值,但没有从这里的模型中得到 name 字段值。

注意:我需要将我从第一个操作方法收到的值显示为标签,而不是文本框。

【问题讨论】:

    标签: c# .net asp.net-mvc


    【解决方案1】:

    有两件事,名字写成文本,为了发送回服务器,你需要把它放在输入元素中。

    如果您不想显示它@Html.HiddenFor(m =&gt; m.name) 创建隐藏的输入元素。

    除此之外,请检查 ModelState 是否有验证错误..

    if (!ModelState.IsValid)
         return BadRequest(ModelState);
    
    .... your code here
    

    如果您的模型无效,ProfileData 返回结果

    【讨论】:

      【解决方案2】:

      您尚未添加input 元素,以便在提交表单时将其发送回服务器。如果您不希望它可见,同时仍被回发,请为其添加一个隐藏字段:

      @Html.HiddenFor(m => m.name)
      

      否则,您所做的只是将name 呈现给标记,但是一旦提交表单,它就不会被发回。或者,您可以在设置其readonly 属性的同时为该值呈现一个文本框。这将使其可见,不会更改,并且仍会被发送回服务器。

      @Html.TextBoxFor(m => m.name, new { @readonly = "readonly" })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-08
        • 2019-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-17
        • 1970-01-01
        相关资源
        最近更新 更多