Преобразование MVC 2 Нарушает параметры, переданные моей хранимой процедуре - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть несколько текстовых полей, которые не требуются. Если пользователь ничего не вводит, он передается как «ноль» в MVC 2. Он передается как «» »в MVC 1. Какие изменения можно внести, чтобы приспособиться к этому?

    public string Name { get; set; }
    public string Offer{ get; set; }
    public string AutoID { get; set; }


        using (SqlConnection connect = new SqlConnection(connections))
        {
            SqlCommand command = new SqlCommand("Info_Add", connect);
            command.Parameters.Add("autoID", SqlDbType.BigInt).Direction = ParameterDirection.Output;                
            command.Parameters.Add(new SqlParameter("name", Name));

            //Offer now returns a null value, which cannot be passed
            command.Parameters.Add(new SqlParameter("offer", Offer));
            command.CommandType = CommandType.StoredProcedure;

            connect.Open();
            command.ExecuteNonQuery();
            AutoID = command.Parameters["autoID"].Value.ToString();
        }

Ответы [ 3 ]

12 голосов
/ 13 апреля 2010

Измените свою модель подшивки:

public class EmptyStringModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        bindingContext.ModelMetadata.ConvertEmptyStringToNull = false;
        return base.BindModel(controllerContext, bindingContext);
    }
}

и затем в global.asax:

ModelBinders.Binders.DefaultBinder = new EmptyStringModelBaseBinder();

Это вернется к настройкам по умолчанию из MVC 1. bindingContext.ModelMetadata.ConvertEmptyStringToNull свойство отвечает за преобразование в null.

1 голос
/ 13 апреля 2010

Проверьте свойства с помощью string.IsNullOrEmpty() и, если оно истинно, установите для него некоторое значение по умолчанию.

Таким образом, он работает как для ASP.NET MVC 1, так и для ASP.NET MVC 2

0 голосов
/ 28 апреля 2010

Еще один способ переопределить поведение ModelBinder - переопределить GetPropertyValue, здесь происходит волшебство ConvertEmptyStringToNull:

namespace System.Web.Mvc
{
    class KeepEmptyStringsEmptyModelBinder : DefaultModelBinder
    {
        protected override object GetPropertyValue(ControllerContext controllerContext, ModelBindingContext bindingContext, ComponentModel.PropertyDescriptor propertyDescriptor, IModelBinder propertyBinder)
        {
            return propertyBinder.BindModel(controllerContext, bindingContext);
        }
    }
}

Brian

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...