2009-12-29 1 views
1

У меня есть таблица поставщиков (объект продавца), где один из столбцов - это ссылка NULLABLE по внешнему ключу на мою таблицу учетных записей (объект Account). В моей форме редактирования я показываю список учетных записей как раскрывающийся список. У меня нет проблем с установкой значения или обновлением значения для другой учетной записи.Убрать внешнее значение ключа для приложения MVC

Однако я не смог очистить значение. Каждый раз, когда я это делаю, вызов UpdateModel() или, может быть, вызов Save(), кажется, терпит неудачу (нет ошибок модели). Я попытался выполнить код, но мне не удалось получить согласованные результаты, поэтому я не могу определить точную проблему, но все это, похоже, указывает на ссылку FK. Я попытался явно установить значение Nothing, но это не работает.

Это мой первоначальный код.

<AcceptVerbs(HttpVerbs.Post)> _ 
Public Function Edit(ByVal id As String, ByVal formValues As FormCollection) As ActionResult 
    Dim vendor = _repo.GetVendor(id) 

    Try 
     UpdateModel(vendor) 

     _repo.Save() 

     Return RedirectToAction("Index") 
    Catch 
     ModelState.AddRuleViolations(vendor.GetRuleViolations()) 

     ViewData.Item("Accounts") = Models.DropDownPopulators.PopulateAccounts(_accounts.FindAllAccounts(), vendor.DefaultAccount) 

     Return View(vendor) 
    End Try 
End Function 

Я даже попытался добавить следующее после обновления. Я также попытался сделать то же самое с значением формы перед обновлением.

If (vendor.DefaultAccount.Equals("")) Then vendor.DefaultAccount = Nothing 
+0

Можем ли мы увидеть метод 'Сохранить' вашего репозитория? Кроме того, вы на 100% уверены, что 'vendor' находится в текущей коллекции репозитория? –

+0

Мне пришлось отправить ответ как ответ, потому что все форматирование (включая разрывы строк) лишены. Не уверен, что это правильный способ сделать это ... – Jason

ответ

0

Я 100% уверен, что я имею дело с моим VendorRepository

Private _repo As New Models.VendorRepository() 

и

Namespace Models 

    Public Class VendorRepository 

    Private _db As New InvoicingDataContext() 

    Public Function FindAllVendors() As List(Of Vendor) 
    Return _db.Vendors.ToList() 
    End Function 

    Public Function GetVendor(ByVal id As String) As Vendor 
    Return _db.Vendors.SingleOrDefault(Function(v) v.Id = id) 
    End Function 

    Public Sub Save() 
    _db.SubmitChanges() 
    End Sub 

End Class 

End Namespace 
0

Используйте отдельный класс для сравнения значений в контроллере и передать значения от контроллера для просмотра страницы используя этот «viewclass».