0

これは私のCreateUnit.cshtmlで、templateIdをID'TemplateId'の非表示の入力フィールドに設定します。ダイアログを確認すると、asp.netmvcコントローラー'UnitController'とそのアクションメソッド'Create'が実行され、UnitViewModelを渡す必要があります。UnitViewModel内で、モデルバインダーはnameプロパティを入力した値に設定しました。ただし、非表示フィールドのtemplateIdがありません。

なぜこれ?

@model ITMS.Web.Models.UnitViewModel

@*Remote Validation*@
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<script type="text/javascript">

    $(document).ready(function () {
        var templateId = $('#MyDialog').data('templateIdKey');
        $('#TemplateId').text(templateId);       
    }); 

</script>

@using (Html.BeginForm("Create", "Unit"))
{ 
     @Html.ValidationSummary(false)
    <p class="editor-label">@Html.LabelFor(model => model.Name)</p>
    <p class="editor-field">@Html.EditorFor(model => model.Name)</p>
    <p class="editor-field">@Html.ValidationMessageFor(model => model.Name)</p> 

    @Html.HiddenFor(x => x.TemplateId)      
}

[HttpPost]
public ActionResult Create(UnitViewModel unitViewModel)
{
    if (ModelState.IsValid && !_dataProvider.UnitExists(unitViewModel.Name, unitViewModel.TemplateId))
    {
        Unit unit = Mapper.Map<UnitViewModel, Unit>(unitViewModel);
        _dataProvider.AddUnit(unit);
        return new JsonNetResult(new { success = true });
    }
    ModelState.AddModelError("Name", "This name already exists.");
    return PartialView(unitViewModel);
}

 public class UnitViewModel
    {
        [Required(ErrorMessage = "Name must not be empty.")]
        [StringLength(30, ErrorMessage = "Enter max. 30 chars for a name.")]
        [Remote("UnitExists", "Unit", ErrorMessage = "This name already exists.",AdditionalFields="TemplateId")]
        [JsonProperty("title")]
        public string Name { get; set; }  

        public Nullable<int> ParentId { get; set; }

        [HiddenInput(DisplayValue = false)]
        public int TemplateId { get; set; }
    }
4

2 に答える 2

0

@Html.HiddenFor(x => x.TemplateId)ビューではなく、代わりに使用してください@Html.EditorFor(x => x.TemplateId)。HTMLは非表示の入力フィールドとしてレンダリングされます。

于 2012-09-27T22:19:55.613 に答える
0

それ以外の:

$('#TemplateId')。text(templateId);

私はこれを書きました、そして今、TemplateIdはフォームで送られます:)

$( "[name ='TemplateId']")。val(templateId);

私からの愚かな入力フィールドにはテキストがありません...

于 2012-09-29T15:46:59.700 に答える