Странная проблема: частота обновления базы данных 60-40 при создании записей в ASP.NET MVC 3 с Razor с использованием SQL Server 2008 R2 - PullRequest
0 голосов
/ 04 февраля 2011

Ребята, у меня действительно странная вещь, происходящая в mvc3. Я использую C # в качестве языка программирования и использую SQL Server 2008 R2 в качестве сервера и использую Linq-to-SQL.

Когда я создаю записи, вещи обновляются, и время от времени они не обновляются. Я установил точки останова, проверил и не нашел ничего работающего в коде. Но иногда, когда время от времени выполняются проверки точек останова (не всегда), даже если данные присутствуют на странице, они (данные) не передаются методу UpdateModel(visitor), а затем я получаю исключение, которое говорит

Модель типа 'VisitorTrackingSystem.Models.Visitor' не может быть обновлено.

Я полностью сбит с толку. Есть ли ошибка в коде MVC3, которая вызывает это? И у меня есть 7 таблиц в этой базе данных, и только одна конкретная таблица имеет проблему.

[HttpPost]
public ActionResult Create(FormCollection collection) //Creates a new record
{
    Visitor visitor = new Visitor();
    try
    {
        // TODO: Add insert logic here
        UpdateModel(visitor);
        visitorRepository.Add(visitor);
        visitorRepository.Save();                
    }
    catch(Exception e)
    {
        var exMsg = e.Message;
        return View("Exception");
    }  
    return RedirectToAction("Details", new { id = visitor.ID });
}

Ответы [ 2 ]

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

Это исключение может произойти, если пользователь пытается отправить какое-либо значение, которое не может быть привязано к соответствующему свойству модели.Например, пользователь вводит "foo bar" в текстовое поле, которое должно быть связано с целочисленным свойством.Вместо этого вы можете использовать TryUpdateModel:

[HttpPost]
public ActionResult Create()
{
    Visitor visitor = new Visitor();
    if (!TryUpdateModel(visitor))
    {
        // There was a model error => redisplay the view so 
        // that the user can fix it
        return View();
    }

    try
    {
        visitorRepository.Add(visitor);
        visitorRepository.Save();                
    }
    catch(Exception e)
    {
        var exMsg = e.Message;
        return View("Exception");
    }  
    return RedirectToAction("Details", new { id = visitor.ID });
}

или чуть проще:

[HttpPost]
public ActionResult Create(Visitor visitor)
{
    if (!ModelState.IsValid)
    {
        // There was a model error => redisplay the view so 
        // that the user can fix it
        return View();
    }

    // you don't really need those try/catch here
    // simply leave the exception propagate and the 
    // HandleError global exception filter
    // will render the ~/Shared/Error.cshtml view passing
    // the exception details
    visitorRepository.Add(visitor);
    visitorRepository.Save();                
    return RedirectToAction("Details", new { id = visitor.ID });
}
0 голосов
/ 04 февраля 2011

Я нашел, что вызывает эту странность.Проблема на стороне пользователя.Когда значение в конкретной записи не совпадает с соответствующим внешним ключом, возникает исключение.Тем не менее проверка, предоставленная Дарином Димитровым, полезна

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