使用Html.Helpers时Razor MVC中的奇怪行为

时间:2011-08-03 22:47:43

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

我正在使用Razor HtmlHelpers。 使用下面的代码我试图打印ViewItemDto的值,但它总是显示0使用@ Html.TextBoxFor或任何@Html ... For(x => ..)方法。

有人知道为什么会这样吗?

注意 - 该方法返回正确的值,因为我可以调试并在视图端的调试窗口中查看值。

[DataContract]
[Serializable]
public class ViewItemDto 
{
    [DataMember]        
    public decimal ViewItemId { get; set; }

    [DataMember]        
    public string ItemName { get; set; }
}

From Controller Return 
public ActionResult Index()
    {
        ViewItemDto viewItem = new ViewItemDto();
        viewItem.ItemName = "OldData";
        viewItem.ViewItemId = 10;
        return View(viewItem);
    }

    public PartialViewResult SaveData(ViewItemDto viewItem)
    {
        viewItem.ItemName = "NewData";
        viewItem.ViewItemId = 100;
        return PartialView("ViewUserControl1", viewItem);
    }

On View ViewUserControl1

@model Testing.Models.ViewItemDto
<div id="divSave">
@using (Ajax.BeginForm("SaveData", "Home", new AjaxOptions()
{
   UpdateTargetId = "divSave",
   OnSuccess = "OnSuccess",
   InsertionMode = InsertionMode.Replace
}))
{
    @Html.TextBoxFor(x => x.ViewItemId)//Shows 10
    @Html.TextBox("ID", Model.ViewItemId) //Shows proper value 100
    @Html.TextBoxFor(x => x.ItemName)//Shows oldData value 
    <input type="submit" name="name" value="Submit" />
}

和Index.cshtml

@model Testing.Models.ViewItemDto
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>

@Html.Partial("ViewUserControl1", Model);

2 个答案:

答案 0 :(得分:1)

你不应该:

  return PartialView(viewItem);

而不是:

  return viewItem;

答案 1 :(得分:0)

通过将控制器的代码更改为以下内容,可以在此处工作:

public PartialViewResult SaveData(ViewItemDto viewItem)
{
   viewItem.ViewItemId = 100;
   return viewItem;
}

我无法重现您的问题,因为提供的代码甚至没有编译。