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

モデルの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 に答える