views:

37

answers:

2

Hey everyone,

I am using the default asp.net MVC 2 syntax to construct TextBox's which are integer or decimal for my asp.net MVC web app:

<%: Html.TextBoxFor(model => model.Loan.InterestRate) %>

pretty straight forward, but the problem is inherently of the fact my binding model objects are decimal or int and non-nullable, they print their value as zero (0) on page load if my model is empty (such as in add mode for a CRUD template) and zero is an incorrect value and is invalid for my page validation also.

How could I have textboxes which have no starting value, just an empty textbox, I understand zero is a potential value, but I only accept values greater than zero anyway, so this is not a problem for me.

I even tried casting as a nullable decimal and also a non-for helper (which is not ideal), but alas, I am still receiving the default '0' value. any ideas??

<%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate == 0 ? 
    (decimal?)null : Model.Loan.InterestRate) %>

Thanks.

A: 

What about "" instead of null.

    <%: Html.TextBox("Loan.InterestRate", 
Model.Loan.InterestRate == 0 ?     "" : Model.Loan.InterestRate) %>

Also why isnt Loan.InterestRate nullable?

<%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate ?? "") %>
bleevo
Um because I don't want it to be. Will try empty string.
GONeale
Anyway that won't compile because string and decimal are different data types. "No implicit conversion between string and decimal."
GONeale
+1  A: 

You can override the default template by putting a custom template in /Shared/EditorTemplates or by controller in /ControllerName/EditorTemplates.

I use this one for Int's. Its named Int32.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>
<%
    string displayText = string.Empty;

    if (Model != null)
    {
        displayText = Model.ToString();
    }

%>

<%= Html.TextBox("", displayText)%>
jfar
Interesting thanks. Will try.
GONeale