【问题标题】:ASP.NET MVC1 - Not all Request fields being returned in Model... (NOOB question)ASP.NET MVC1 - 并非所有请求字段都在模型中返回...(NOOB 问题)
【发布时间】:2010-01-22 22:16:33
【问题描述】:

我正在处理我的第一个 ASP.NET MVC 项目,当我将数据从编辑视图返回到我的控制器操作时,我看到了奇怪的行为。

现在,我在页面上有 3 个文本框,还有一个用于 PKey 的隐藏文本框。所有都是从视图数据中正确填充的,但是当我提交表单时,3 个字段中只有 2 个出现在返回的模型中。但是,请求对象中的所有三个字段均已正确填充。

我可能没有很好地解释它,但这里有一些相关的代码片段希望能更好地解释:

    public ActionResult Edit(System.Guid Id)
    {

        SetBase sb = setBaseRepository.Get(Id);
        return View("Edit", sb );
    }
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(SetBase setBase)
    {
        //if (setBase.Title.Trim().Length == 0)
        //{
        //    ModelState.AddModelError("Title", "Title is required.");
        //}
        if (setBase.Year.Trim().Length == 0) 
        {
            ModelState.AddModelError("Year", "Year is required.");
        }
        if (!ModelState.IsValid)
        {
            return View("Edit", setBase);
        }
        setBaseRepository.SaveOrUpdate(setBase);
        return View();
    }

这是视图本身的“肉”:

<viewdata model="CardTracker.Core.SetBase">
<content name="MainContent">
<% MvcForm form = Html.BeginForm("Edit", "SetBase", Model.Id); %>

<%=Html.ValidationSummary("Update was unsuccessful. Please correct the errors and try again.", new { class = "dataEntryError" })%>

<fieldset>
    <legend class="dataEntry">Edit Set Base</legend>   
<div>
!{Html.Hidden("Id")}
<label class="dataEntry" for="Title" >Title: </label> ${Html.TextBox("Title", Model.Title, new { class = "dataEntryLong" })}
<%=Html.ValidationMessage("Title", "***", new { class = "dataEntryError" })%>
</br>

<label class="dataEntry" for="Year">Year:</label>${Html.TextBox("Year", null, new { class = "dataEntryNumber" })}
<%=Html.ValidationMessage("Year", "***", new { class = "dataEntryError" })%>
</br>


</div>
<input type="submit" value="Update" class="button" /> 
</fieldset>
<% form.EndForm(); %>
</content>

“Id”和“Year”字段返回得很好,但“Title”总是返回空白。我已经验证了所有地方的拼写都是正确的。

我确定我在做一些明显错误的事情,但我没有看到。我研究过的大量示例都没有帮助,其中大多数都显示了添加功能而不是编辑功能。

提前感谢所有帮助。

【问题讨论】:

  • 你提到了 3 个字段,但我只看到 2 个有 1 个隐藏字段。
  • 是的,我删除了一个额外的数字字段,除了名称之外几乎与“年份”相同,只是为了保持代码简短。它不影响行为是否存在。

标签: asp.net-mvc spark-view-engine


【解决方案1】:

我将开始列出我注意到的事情,直到我偶然发现对你有帮助的事情:

  1. Title 字段是唯一实际引用模型的字段。您的 Year 字段的初始值为 null。我真的不认为这很重要,但这是我能看到的唯一区别。
  2. 只是想在这里找到奇怪的边缘情况,所以我要确保 BeginForm("Edit","SetBase", Model.id) 语句中的“SetBase”值确实在调用控制器?这与您的模型名称相同,这显然没问题,但要确保它是控制器的名称。

...一切看起来都不错,但显然有问题。

【讨论】:

  • 是的,这是为了解决问题。当我用 null 替换它时它仍然失败。
  • 在上面添加了#2。我不认为这真的是问题,但我想我会提出来。
  • 是的,它是正确的控制器名称。我确定是因为我确实在所需的 ActionMethod 中遇到了断点。不过建议很好。
  • 这可能比你愿意做的工作要多,但也许你尝试一个“普通”的 MVC 视图而不是使用 spring 只是为了看看你是否可以让它在那里工作。如果是这样,那么也许这可能会给您提供线索,说明为什么它在您的 Spring 实现中失败了?
  • 可能不是一个坏主意。我会试一试。
猜你喜欢
  • 2019-03-12
  • 2010-12-11
  • 1970-01-01
  • 2023-03-29
  • 2013-05-24
  • 1970-01-01
  • 2023-04-09
  • 2020-07-04
  • 1970-01-01
相关资源
最近更新 更多