ASP.NET Клиентская модель MVC и JavaScript

#javascript #asp.net-mvc

#javascript #asp.net-mvc

Вопрос:

Мне любопытно, как обработать установку информации о модели с возможностью обнуления на странице aspx в переменную JavaScript. Я использую MVC3 RC, и я уверен, что это тривиально, и я чего-то не хватает.

Учитывая этот код (опять же, в моем представлении aspx):

 var myFloat = <%: Model.MyNullableFloat %>;
  

если SelectedAudience равно нулю, на страницу записывается следующее:

 var myFloat = ;
  

То, что я хочу записать, это:

 var myFloat = null;
  

В настоящее время у меня есть какая-то уродливая логика:

     var myFloat = null;
    <%
        if(Model.MyNullableFloat != null) {
    %>
            myFloat = <%: Model.AdGroup.MyNullableFloat %>;
    <%
        }
    %>
  

Есть мысли о более чистом способе?

Спасибо

Ответ №1:

Вы можете использовать условный оператор

 var myFloat = <%: Model.MyNullableFloat.HasValue
    ? Model.MyNullableFloat.Value.ToString() 
    : "null"%>;
  

Помните, что оба условия должны возвращать один и тот же тип, поэтому вам придется ToString() указать результат, если вы хотите вернуть "null" .

Ответ №2:

Используйте тернарный оператор для быстрого решения:

 var myFloat = <%: Model.MyNullableFloat.HasValue ? Model.MyNullableFloat.Value : "null"  %>;
  

Комментарии:

1. вам нужно ToString() указать значение, иначе это вызовет исключение

Ответ №3:

Это не намного лучше ..!

 <%= Model.MyNullableFloat.HasValue? Model.MyNullableFloat.ToString() : "null"%>;
  

или вы могли бы попробовать метод расширения

 public static string ToStringVerboseNull(this float? myFloat)
{
    return myFloat.HasValue ? myFloat.ToString() : "null";
}
  

и затем

 <%= myFloat.ToStringVerboseNull()%>
  

Ответ №4:

 var myFloat = <%= Model.MyNullableFloat != null ? Model.MyNullableFloat.ToString() : "null" %>;
  

Вы также могли бы обработать это в своем контроллере

 Public Class MyModel {
  public string MyNullableFloatAsString { get; set; }
}

Public ActionResult Something () {
  MyModel MyControllerModel;

  MyControllerModel.MyNullableFloatAsString = Model.MyNullableFloat != null ? Model.MyNullableFloat.ToString()   ";" : "null;"

  //Return Model to view
}
  

Теперь, на ваш взгляд, вы можете просто сделать это

 var myFloat = <%= Model.MyNullableFloatAsString %>
  

Комментарии:

1. разве вам не нужно ToString() использовать значение с нулевым значением float?