5

我们试图在视图中实现类型安全并使用新的 ExpressionInputExtenssion HtmlHelpers,但我们看到了一些不一致的结果。我们有一个看起来像这样的视图:

ViewData.Model.FooID = <%= ViewData.Model.FooID %><
Model.FooID = <%= Model.FooID  %>       
<%= Html.HiddenFor(x=>x.FooID) %>  

但是我们在渲染视图中看到的是这样的:

ViewData.Model.FooID = 515b0403-e75b-4bd7-9b60-ef432f39d338
Model.FooID = 515b0403-e75b-4bd7-9b60-ef432f39d338    
<input id="FooID" name="FooID" type="hidden" value="" />  

我可以手动添加:

<input id="FooID" name="FooID" type="hidden" value="<%= Model.FooID %>" />

但是现在我们不再,但令人惊讶的是,当我这样做时,Html.HiddenFor 总是具有正确的值。

4

4 回答 4

3

看看这个:http: //blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

于 2010-08-16T05:50:24.723 回答
2

看起来扩展方法后面的模型绑定器无法将您的 FoodID 数据类型转换为字符串。您的数据类型是常规 GUID 吗?

我知道这种用于处理二进制文件的扩展方法有重载,但我不确定 GUID ....

你试过调试它吗?

于 2009-11-16T02:52:33.947 回答
1

我遇到了类似的问题,我有一个模型元素是 hiddeninput,我可以在显示视图时看到这个元素的正确值(作为调试我显示它以检查视图中是否有正确的值),但是一旦我发布视图,该元素的返回值在第一次设置时保持不变,无论我刷新显示并确保视图上显示正确的值,但返回值只是保持第一次设置的值。这很奇怪。

于 2010-05-25T09:12:27.713 回答
1

您还可以滚动使用属性值的自己的扩展

@Html.HiddenForField(m => m.Location.CityRequired)

public static class HiddenExtensions
{
    public static MvcHtmlString HiddenForField<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression) where TModel : class
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        var value = metadata.Model;
        return htmlHelper.HiddenForField(expression, value);
    }

    public static MvcHtmlString HiddenForField<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, object value) where TModel : class
    {
        string htmlFieldName = ExpressionHelper.GetExpressionText(expression);
        string fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName);
        var tag = new TagBuilder("input");
        tag.GenerateId(fullName);
        tag.Attributes.Add("type", "hidden");
        tag.Attributes.Add("name", fullName);
        tag.Attributes.Add("value", value != null ? value.ToString() : string.Empty);
        return new MvcHtmlString(tag.ToString());
    }
}
于 2013-02-19T09:45:28.960 回答