asp.net mvc: разрешить несколько форматов ввода для поля ввода - PullRequest
0 голосов
/ 25 февраля 2011

Я хочу разрешить несколько входных форматов для поля ввода. В моем случае это поле Долгота. В БД я установил десятичное значение (18,10). Ожидается получение значения через запятую, например 16,2345678, но Карты Google или некоторые пользователи используют точку, например 16.2345678 Я не хочу возвращать ошибку, но просто радуюсь и преобразовываю ее в ожидаемый формат БД.

Я пытался сделать это в своем классе проверки метаданных (используя Entity Framework)

public partial class Job

    /*[Bind(Exclude = "ID")]*/
    public class JobMetaData
    {
        public object Longitude
        {
            get { return this.Longitude; }
            set { this.Longitude = value; /* Seems that this point isnt reached*/ }
        }

но, к сожалению, сеттер не вызывается и ViewState.isValid возвращает просто false.

[HttpPost]
    public ActionResult Edit(Job model)
    {

        // parse the long-lat if needed here??

        try
        {
            if (!ModelState.IsValid)
            {

Где я должен попытаться проанализировать значение, чтобы оба значения (разделенные запятыми и разделенные точками) преобразовали их и сохранили.

У меня та же проблема с другим полем: я бы хотел, чтобы пользователь ввел 4 или 4 €, на случай, если просто удалите знак € и сохраните его как число в db.

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Если у вас есть такая же проблема для другого поля.
в качестве передового опыта -
1] используйте ViewModel "JobViewModel"

2], чтобы при необходимости вы могли создавать пользовательские атрибуты проверки для вашегодругие свойства

3] В Редактировать сообщение примите ViewModel.[HttpPost] public ActionResult Edit (модель задания) {

    // parse the long-lat if needed here??

    try
    {
        if (!ModelState.IsValid)
        {

4], и если Modellstate isValid выполняет необходимый анализ и затем сохраняет его в базе данных.

EDIT

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(JobViewModel jobviewModel)
    {
    try
        {
                if (!ModelState.IsValid)
        {
            jobviewModel.Longitude.replace(".",",")
            -- save DB logic here

        }

    }

    }

public class JobViewModel 
{
    public string Longitude{ get; set; }
}


For GET methods need to use use Automapper. or 

    jobviewModel.Longitude = model.Longitude
0 голосов
/ 25 февраля 2011

Используйте строковый тип и делайте с ним что хотите.

public partial class Job
{
    public class JobMetaData
    {
        public string Longitude { get; set; }
    }
}
...