0

Fiddlerを使用すると、リクエストが行われていないことはわかりますが、理由はわかりません。

フォームは次のとおりです。

@using (Html.BeginForm("Index", "FileSystemChannelIndex", FormMethod.Post, new {
channelId = @Model.ChannelId }))
{
    @Html.HiddenFor(model => model.Id)
    @Html.HiddenFor(model => model.ChannelId)
    <div class="editor-label">
        Select File Source
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(
            model => model.SelectedFileSourceValue,
            new SelectList(Model.AvailableFilesSources, "Id", "Name"),
            new { id = "selectFileSource" })
    </div>
    <p>
        <input class="t-button" type="submit" value="Save" />
    </p>
}

ビューは元々次のものから来ました:

public ViewResult Create(int channelId)
{   
    var channel = this.fullUOW.GetFileSystemChannelRepository().All.Where(c => c.Id == channelId);
    var vm = new FileSystemChannelIndexViewModel(channelId, new FileSystemChannelIndex());
    return View("Edit", vm);
}

「name」属性をに追加しようとしましたが、違いはありませんでした。

何か案は?

編集:ジムらの詳細...

ドメイン:

public class FileSystemChannel
{
   public int Id {get; set; }
   public ICollection<FileSystemChannelIndex> ChannelIndexes { get; set; }
}

public class FileSystemChannelIndex
{
   public int Id { get; set; }
   public FileSystemChannel ParentChannel { get; set; }
}

0 ... *の関連付けのため、UIで最初にFileSystemChannelを作成してから、FileSystemChannelIndexを追加する必要があります。そのため、channelIdをFileSystemChannelIndex作成ビューに渡します。新しいFileSystemChannelIndexを送信するときは、次のアクションを呼び出す必要があります。

[HttpPost]
public ActionResult Index(int channelId, FileSystemChannelIndexViewModel vm)
{
    //TODO: get the Channel, add the Index, save to db

    return View("Index");
}
4

3 に答える 3

3

したがって、Markのコメントのおかげで、Selectがクライアント側の検証に失敗したことが原因です。IE開発ツールを使用して要素を検査します。

<select name="SelectedFileSourceValue" class="input-validation-error" id="selectFileSource" data-val-required="The SelectedFileSourceValue field is required." data-val-number="The field SelectedFileSourceValue must be a number." data-val="true">
于 2012-05-25T13:35:45.007 に答える
1

エンポ、

上記の私のコメントに加えて:

empo-両方のpublic ActionResult Create(////)メソッド(つまりHttpPost、とHttpGet)を質問に投稿できますか?これは、問題があいまいなメソッド署名に関連している場合に強調される可能性があります。これは、HttpGetアクション結果と同じ署名を投稿している場合に当てはまると思われます。

次の行に沿って適切なHttpPostactionresultを追加してみてください。

[HttpPost]
public ActionResult Create(FileSystemChannelIndex domainModel)
{
    if (!ModelState.IsValid)
    {
        return View(PopulateEditViewModel(domainModel));
    }

    _serviceTasks.Insert(domainModel);
    _serviceTasks.SaveChanges();
    return this.RedirectToAction("Edit", new {id = domainModel.ChannelId});
}

あなたのオリジナルのHttpGet(私には「奇妙」に感じます):

[HttpGet]
public ViewResult Create(int channelId) {   
    var channel = this.fullUOW.GetFileSystemChannelRepository().All
       .Where(c => c.Id == channelId);
    var vm = new FileSystemChannelIndexViewModel(channelId, 
        new FileSystemChannelIndex());
    return View("Edit", vm); 
}

Edit actionresult内で、渡されたIDに基づいてエンティティを取得します。うまくいくかもしれないし、うまくいかないかもしれない。ドメインとロジックの全体像がなければわかりません。

明らかに、あなた自身の配管は異なりますが、これは何が期待されるべきかについての考えを与えるはずです。

于 2012-05-25T10:31:28.387 に答える
0

何かを作成するときに、どのようにModel.Idを使用できますか?たぶんModel.Idがnullで、投稿できないためです

于 2012-05-25T11:10:26.080 に答える