2017-06-19 77 views
1

我的遠程驗證有問題。ASP.NET MVC隱藏輸入作爲附加字段發送爲空作爲遠程驗證程序

以下是我的模型:

[MetadataType(typeof(M_ToolingAnnotation))] 
public partial class M_Tooling 
{ 
    public string ToolingID { get; set; } 
} 

internal sealed class M_ToolingAnnotation 
{ 
    [Required] 
    [Display(Name = "Tooling ID")] 
    [StringLength(50, ErrorMessage = "The {0} must be less than 50 characters long.")] 
    [Remote("CheckToolingID", "Tooling2", AdditionalFields = "ToolingID_Ori", ErrorMessage = "Tooling ID already in use!")] 
    public string ToolingID { get; set; } 
} 

public class M_ToolingViewModels2 : M_Tooling 
{ 
    public M_ToolingViewModels2() 
    { 
     this.M_Tooling = new M_Tooling(); 
    } 

    public M_Tooling M_Tooling { get; set; } 

    public string LocationID { get; set; } 
} 

以下是控制器:

public ActionResult Index() 
{ 
    ViewBag.ToolingID_Ori = "lalala"; 

    return View(); 
} 

[HttpGet] 
public JsonResult CheckToolingID([Bind(Prefix = "M_Tooling.ToolingID")] string ToolingID, string ToolingID_Ori) 
{ 
    var result = true; 

    if (ToolingID != ToolingID_Ori) 
    { 
     var routingID = db.M_Tooling.Where(u => u.ToolingID == ToolingID).FirstOrDefault(); 

     if (routingID != null) 
     { 
      result = false; 
      ModelState.AddModelError(string.Empty, "Tooling ID already exists."); 
     } 
    } 

    return Json(result, JsonRequestBehavior.AllowGet); 
} 

最後視圖:

@Html.Hidden("ToolingID_Ori", (string)ViewBag.ToolingID_Ori); 
@Html.LabelFor(model => model.M_Tooling.ToolingID, "Tooling ID*", htmlAttributes: new { @class = "col-md-2 control-label", @style = "color:red" }) 
@Html.TextBoxFor(model => model.M_Tooling.ToolingID, new { @class = "col-md-2 form-control", @readonly = "readonly" }) 
@Html.ValidationMessageFor(model => model.M_Tooling.ToolingID, "", new { @class = "col-md-5 text-danger" }) 

予檢查的元件,它如下面顯示:

enter image description here

enter image description here

斷點上我們可以看到,價值ToolingID

enter image description here

但不是ToolingID_Ori

enter image description here

我一直在尋找解決方案,但他們提到的名稱必須相同,我需要把前綴綁定。但我如何做隱藏輸入?

+0

你還沒有綁定任何東西!您從ViewBag中設置ToolingID_Ori並將其呈現在隱藏的控件中...而不是hiddenFor!爲什麼不只是將ToolingID_Ori添加到模型中? – Wheels73

+0

那麼,即使'BindAttribute'本身在模型綁定模式中也不包含'ToolingID_Ori'。使用具有字符串屬性的viewmodel類,並將其與強類型助手綁定,例如代替'HiddenFor'。 –

+0

您沒有向我們顯示正確的代碼。你已經在控制器中將'ViewBag.ToolingID_Ori'的值設置爲「lalala」,但是html的圖像顯示隱藏輸入的值爲'Tool A' –

回答

1

您需要使用HiddenFor將模型映射到視圖。

+0

OP正在使用'@ Html.Hidden()'這很好,'HiddenFor()'可能是更好的練習,但它沒有區別在模型中沒有'ToolingID_Ori'屬性,所以他們不能使用'HiddenFor()' –

+0

它的確定我沒有看到..改變使用'@HiddenFor()'並且在模型中包含'ToolingID_Ori'對我來說會很好,再次感謝你們的關注。 – Khairul