2016-09-23 28 views
0

私はASP.NETコアプロジェクトでモデルを作成しました。モデルには「Id」プロパティがあります。モデルをデータベースに保存する場合、モデルのIDはnullと表示されます。ここでは、コードは次のようになります。ASP.NETコア - モデルのID /キーに値がありません

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<IActionResult> SaveMessage(MessageViewModel model, string returnUrl = null) 
{ 
    ViewData["ReturnUrl"] = returnUrl; 
    if (ModelState.IsValid) 
    { 
     var message = new MessageModel 
     { 
      SenderName = await _userManager.GetUserNameAsync(await _userManager.GetUserAsync(User)), 
      Title = model.Title, 
      Email = model.Email, 
      Message = model.Message, 
      SavedDate = DateTime.Now, 
      Sent = false 
     }; 
     var userMessage = new UserMessage 
     { 
      ApplicationUser = await _userManager.GetUserAsync(User), 
      MessageModel = message 
     }; 

     _context.MessageModel.Add(message); 
     _context.UserMessage.Add(userMessage); 
     await _context.SaveChangesAsync(); 

     return RedirectToAction(nameof(HomeController.Home), "Home"); 
    } 
    return RedirectToAction(nameof(MessageController.EditMessage), "Message", model); 
} 

そして、ここではモデルです:

public class MessageModel 
{ 
    public string Id { get; set; } 
    public string SenderName { get; set; } 
    public string Title { get; set; } 
    public string Email { get; set; } 
    public string Message { get; set; } 
    public DateTime SavedDate { get; set; } 
    public bool Sent { get; set; } 

    public List<UserMessage> UserMessages { get; set; } 
} 

私はIDに値を与えることができますどのように? ありがとうございました!

+0

該当するモデルコードを投稿し、エラーの原因となるモデルを教えてください。 –

+0

Idがモデルにない場合。たとえば、hidden @@ Html.Hidden()の入力を使用して、ビューの値を提供する必要があることを意味します。 –

答えて

0

モデルの定義を見ることなく、これは私の推測です:

あなたのIdが最も可能性の高いあなたが設定するデータベースを期待している主キーです。しかし、モデルを定義したときには、Idプロパティをキーとして指定していない可能性が高く、コードでも設定していないため、nullになっています。

0

あなたのWebページからモデルデータを掲載している場合は、そのモデルのプロパティにFromBodyタグが必要な場合があります。

public async Task<IActionResult> SaveMessage([FromBody] MessageViewModel model, string returnUrl = null) 

それはそれからシリアライズ試してみてください、あなたの行動を伝えるの.NETのコアの方法がありますがリクエスト本体。これは、.NETのモデルバインディングとは少し違っています...間違っています...コアではありません。

とにかく - check it out。これは単なる推測ですが、モデル内の他のプロパティがNULL /デフォルトである場合、それはおそらく起こっていることです。

+0

"not-core" - > Full Framework? –

+0

Ha。 「フルフレームワーク」という言葉は、コアよりも優れているとは言えません。レッドモンドのマーケティングチームは、勢いを増している間に黙って座るとは想像できません。 – bri

関連する問題